C中fgets和strtok的问题

时间:2017-01-26 20:14:54

标签: c arrays multidimensional-array fgets strtok

我需要用字符串中的数字填充二维数组,因此我使用strtokfgets来获取字符串并对其进行标记。但是,如果我输入“1 2 3 4 5”并且2d数组的尺寸是2x2,则5永远不会被分配给number。我想检查是否有多个数字而不是矩阵可以容纳但是number总是在将4添加到矩阵而不是5之后最终为NULL。我知道SIZE是正确的,因为如果我打印出来在stringInputted之前strtok打印出正确的输出。

scanf("%d", &rows);
scanf("%d", &columns); 
//SIZE = 2*rows*columns+1
//rows and columns are user inputted and stored using scanf
fgets(stringInputted, SIZE, stdin);
 char *number = strtok(stringInputted, " \n");

 for(i = 0; i < rows; i++){
    for(j = 0; j < columns; j++){
        if(number != NULL)
            matrix[i][j] = atoi(number);
        else{
            printf("ERROR Insufficient numbers entered\n");
            return 0;
        }
        number = strtok(NULL, " \n");
    }
 }
 if(number != NULL) printf("TOO MANY NUMBERS\n");

1 个答案:

答案 0 :(得分:1)

您的SIZE不正确。

  

fgets()从流中读取最多一个小于大小的字符...终止空字节('\ 0')存储在缓冲区中的最后一个字符之后。

所以你需要消耗10个字节,而不是9个字节。