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

Segmentation Fault while assigning int to array

我正在尝试从文件中读取一行,分隔字符,然后将它们读入 malloc'ed 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() returns NULL。但是你马上在上面调用atoi(token),如果是NULL就会崩溃。循环条件 while (token != NULL) 无济于事,因为直到循环体结束才检查它。

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