2013-08-31 52 views
-2

我在做一個程序計算PGM圖像的負片,並將其保存在其他PGM image.I'm中的臺詞獲得這個警告鑄造警告:賦值時將整數指針,未在結構

(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

什麼是程序應該做些什麼?您不能將指針指定爲空值,然後訪問該空指針,就好像它有一個帶整數的字符串。 – dcaswell

回答

1

argv[n]char*類型,但例如imagem->lint 所以我會宣佈一些額外的變量,並使用它們,而不是試圖重新使用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; 
} 
+0

我試圖聲明:char * lineX1,colY1; linhaX1 =(imagem-> l-1); colinaY1 =(imagem-> c-1); (argv [5])= linhaX1; (argv [6])= colunaY1;沒有工作 – lauvilu

+0

你需要int類型的變量(參見更新後的答案) – jev

相關問題