将 int 分配给数组时出现分段错误

问题描述

我尝试从文件中读取一行,将字符分开,然后将它们读入一个 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) 没有用,因为它直到循环体结束才被检查。

您需要重构循环,以便在尝试使用结果之前完成测试。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...