我需要用字符串中的数字填充二维数组,因此我使用strtok
和fgets
来获取字符串并对其进行标记。但是,如果我输入“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");
答案 0 :(得分:1)
您的SIZE
不正确。
fgets()从流中读取最多一个小于大小的字符...终止空字节('\ 0')存储在缓冲区中的最后一个字符之后。
所以你需要消耗10个字节,而不是9个字节。