我正在做一个计算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);
}
答案 0 :(得分: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;
}