Online Compiler C

#include <stdio.h> int main() { char a[1001], b[1001][1001]; fgets(a,sizeof(a),stdin); int count1 = 0, count2 = 0 ; for(int i = 0; i < sizeof(a);i++) { if(a[i] = ' ') { count1++; count2 = 0; } b[count1][count2] =a[i]; count2++; } return 0; }
这段代码试图将输入的字符串按空格分割成多个单词,并存储到二维数组 `b` 中。但代码中存在几个关键问题。

- 第6行的 `if(a[i] = ' ')` 使用了赋值运算符 `=` 而不是比较运算符 `==`,这会导致条件永远为真,因为赋值表达式的值就是被赋的值(空格字符的ASCII值),在C中非零值被视为真。
- 循环条件 `i < sizeof(a)` 会遍历整个数组大小(1001),而不是只处理实际输入的字符。`fgets` 会读取包括换行符在内的输入,但数组未初始化的部分可能包含垃圾值。
- 当遇到空格时,代码将 `count2` 重置为0,但随后又执行 `b[count1][count2] = a[i]`,这会把空格本身也存入单词中,导致单词开头多出一个空格。