2017-03-07 470 views
-3

儘管我認爲在此代碼中有多個問題,但我想解決編譯器錯誤第一。提前感謝您的任何建議。接下來我會嘗試解決運行錯誤。
的錯誤:錯誤類型:fuzzer.c:26:25:警告:賦值使指針中的整數無指針[-Wint-conversion]

fuzzer.c: In function ‘main’: 
fuzzer.c:26:25: warning: assignment makes integer from pointer without a cast [-Wint-conversion] 
    charArray[arraySize-1] = NULL; /*make sure charArray[] is a string array that has a size of arraySize */ 
         ^

驗證碼:

所有的
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <sys/wait.h> 
#include <time.h> 

int main(void) 
{ 

     int fuzzNum = 100; 
     char buffer[1000], *charArray; 
     int status, ret, i, j, retCode, arraySize; /* */ 
     time_t t; 
     FILE *fin; 
     FILE *fout; 

     srand((unsigned) time(&t)); /* randomize the initial seed */ 

    for(i=0; i<fuzzNum; i++) 
    { 

     charArray = (char *) malloc(arraySize); 
     for (j=0; j< arraySize; j++) 
     charArray[j] = 'A'; 
     charArray[arraySize-1] = NULL; 
     /*make sure charArray[] is a string array that has a size of arraySize */ 


     /* open and read the cross.jpg file as a binary format file*/ 
     fin=fopen("./cross.jpg","rb"); 

     /*generate a variable file name*/ 
       char fileName[30]; int n; 

       sprintf(fileName, "crashed-%d.jpg", n); 
     fout=fopen("./test.jpg","wb"); 

     /* execute the jpg2bmp file to process the test.jpg file*/ 
     char comBuf[200]; 
     sprintf(comBuf, "./jpg2bmp test.jpg temp.bmp"); 
     ret=system(comBuf); 

     free(charArray); /* must free memory for repeat testing! */ 

     ret=system(buffer); 
     wait(&status); 
     retCode=WEXITSTATUS(ret); 

     if (retCode == 128+11 || retCode ==128+6) /* segmentation fault (11) or Abort (6) */ 
     { 
      printf("retCode=%d, arraySize = %d", retCode, arraySize); 
      fflush(stdout); /*make sure output is print out immediately ! */ 
     } 

    } 

return 0; 
} 
+1

'charArray [arraySize-1] = NULL;' - >'charArray [arraySize-1] = 0;'。 'arraySize'也是未初始化的。 – BLUEPIXY

+0

首先,這是一個警告,而不是一個錯誤。其次,爲什麼不只是'charArray [arraySize-1] = 0;'?. –

+0

charArray不是具有arraySize大小的字符串數組,因爲charArray不是字符串數組。這是一個char數組(因此名稱)。 – immibis

回答

0

首先,這是一個警告,而不是一個錯誤。如果此警告是編譯器在構建過程中產生的唯一問題,那麼您的代碼應該至少編譯成功。但是,如果要解決這個問題,你可以簡單地改變:

charArray[arraySize-1] = NULL; 

要:

charArray[arraySize-1] = 0; 

雖然charArray是指向第一存儲空間陣列,charArray[i],其中一個指針i這裏代表一個計數器,數據類型爲int。現在,NULL用於指針指向空白或以計算機術語指向地面時。因此,編譯器會提醒您,您正在將指針屬性存儲在非指針內存空間中(對於真正的單詞選擇,如果出現任何錯誤,請在評論框中糾正我)。

上述代碼更改應解決編譯器生成的警告。