问题描述
我尝试从文件中读取一行,将字符分开,然后将它们读入一个 malloc 的 int 数组。当我使用 atoi 将 char 转换为 int 时,我似乎遇到了分段错误,因此我无法将 int 分配给数组。任何帮助将不胜感激。
int main(int argc,char * argv[]){
FILE *in;
in = fopen(argv[1],"r");
FILE *out;
out = fopen(argv[2],"w");
int numDays;
char ignore[256];
fscanf(in,"%d",&numDays);
fgets(ignore,sizeof(ignore),in);
int *timeArray = (int *) malloc(numDays * sizeof(int)); ;
char buffer[256];
fgets(buffer,256,in);
const char delimiter[2] = " ";
char *token;
token = strtok(buffer,delimiter);
int index = 0;
while( token != NULL ) {
printf( "%s\n",token);
token = strtok(NULL,delimiter);
int val = atoi(token);
timeArray[index] = val;
index++;
}
return(0);
}
解决方法
当没有剩余令牌时,strtok()
返回 NULL
。但是您立即对其调用 atoi(token)
,如果它是 NULL
,它将崩溃。循环条件 while (token != NULL)
没有用,因为它直到循环体结束才被检查。
您需要重构循环,以便在尝试使用结果之前完成测试。