Онлайн компилятор C

#include <stdio.h> int main() { char a[1001] = {0}, b[1001] = {0}; scanf("%s%s", a, b); for (int i = 0; b[i] != '\0' || a[i] != '\0'; i++) { if (a[i] != b[i]) { printf("%d", i); return 0; } else if (a[i] == '\0' && b[i] = '\0') break; } printf("%d", -1); return 0; }
这段代码试图比较两个字符串,并输出第一个不同字符的位置(从0开始),如果完全相同则输出-1。但代码中存在错误。

- 第9行 `b[i] = '\0'` 使用了赋值运算符 `=` 而不是比较运算符 `==`,这会导致逻辑错误,并且可能使循环提前结束或产生未定义行为。
- 循环条件 `b[i] != '\0' || a[i] != '\0'` 在其中一个字符串结束时仍会继续,但后续访问可能越界。实际上,当两个字符串都结束时才应停止,但当前条件在其中一个结束时仍为真,可能导致访问已结束字符串的越界字符。