-2

我正在做一个程序计算 PGM 图像的负片并将其保存在其他 PGM 图像中。我在行中收到此警告

 (argv[5]) = (imagem->l - 1);
 (argv[6]) = (imagem->c - 1);

我的代码(main.c):

#include <stdlib.h>
#include <stdio.h>

#include "declarations.h" 

typedef struct  
{
  int c; 
  int l; 
  unsigned char **matrizPixels; 
} PGM;

/*command line:
./exec input output x0 y0 x1 y1
argv0  argv1   argv2 argv3 argv4 argv5 argv6*/

int main(int argc, char* argv[])
{
  PGM *imagem = (PGM*)malloc(sizeof(PGM));

  imagem = (PGM*) lePGM(argv[1]);

  /* if there isn't x0,y0,x1,y1... */
  if ( (!(argv[3])) && (!(argv[4])) && (!(argv[5])) && (!(argv[6])) )  
  {
    /* (x0,y0) will be (0,0) */
    (argv[3]) = 0;
    (argv[4]) = 0;

    /* (x1,y1) will be (line-1,colunm-1) */
    (argv[5]) = (imagem->l - 1);
    (argv[6]) = (imagem->c - 1);
  }

  NegativoRegiao(imagem, atoi(argv[3]), atoi(argv[4]), atoi(argv[5]), atoi(argv[6]) );

  salvaPGM(imagem, argv[2]);

  free (imagem); 

  return(0);
}
4

1 回答 1

1

argv[n]是类型char*,但例如imagem->l是,int 所以我会声明一些额外的变量并使用它们而不是尝试重新使用 argv(尤其是在您刚刚验证它不存在的情况下)

您可以检查argc是否提供了足够的参数

malloc通过检查成功返回的值,可以使代码更加健壮

编辑:沿着这些思路

int main(int argc, char* argv[]) {
int x0, y0, x1, y1;

PGM *imagem = malloc(sizeof(PGM));
if (imagem == NULL) {
  fprintf(stderr, "out of memory\n");
  exit(EXIT_FAILURE);
}

if (argc < 3) {
  fprintf(stderr, "missing commandline parameters\n");
  exit(EXIT_FAILURE);
}

imagem = (PGM*) lePGM(argv[1]);

if (argc < 7) {
  // print warning ?
  // set defaults
  x0 = y0 = 0;
  x1 = (imagem->l - 1);
  y1 = (imagem->c - 1);
}

NegativoRegiao(imagem, x0, y0, x1, y1);

salvaPGM(imagem, argv[2]);

free (imagem);

return EXIT_SUCCESS;
}
于 2013-08-31T01:31:33.737 回答