错误类型:fuzzer.c:26:25:警告:赋值从指针生成整数而不使用强制转换[-Wint转换]

错误类型:fuzzer.c:26:25:警告:赋值从指针生成整数而不使用强制转换[-Wint转换],c,C,虽然我认为我在这段代码中有不止一个问题,但我想先解决我的编译器错误。提前感谢您的建议。接下来我将尝试解决运行错误。 错误: 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

虽然我认为我在这段代码中有不止一个问题,但我想先解决我的编译器错误。提前感谢您的建议。接下来我将尝试解决运行错误。
错误:

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;
}
#包括
#包括
#包括
#包括
#包括
#包括
内部主(空)
{
int fuzzNum=100;
字符缓冲区[1000],*charArray;
int status,ret,i,j,retCode,arraySize;/**/
时间;
文件*fin;
文件*fout;
srand((未签名)time(&t));/*将初始种子随机化*/

对于(i=0;i首先,这是一个警告,而不是一个错误。如果此警告是编译器在生成过程中产生的唯一问题,那么您的代码至少应该成功编译。但是,如果您想克服此问题,您可以简单地更改:

charArray[arraySize-1] = NULL;
致:

charArray
是指向数组中第一个内存空间的指针,
charArray[i]
,其中作为示例,
i
表示计数器,其数据类型为
int
。现在,当指针指向零或计算机术语中指向地面时,将使用
NULL
。因此,编译器警告您正在非指针内存空间中存储指针属性(很抱歉用词太多,如果有什么问题,请在评论框中更正我)


上面的代码更改应该可以解决编译器产生的警告。

charArray[arraySize-1]=NULL;
-->
charArray[arraySize-1]=0;
。而且
arraySize
未初始化。首先,这是一个警告,而不是错误。其次,为什么不干脆
charArray[arraySize-1]=0;
?。charArray不是大小为arraySize的字符串数组,因为charArray不是字符串数组。它是char数组(因此得名)。
charArray[arraySize-1] = 0;