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

#include <stdio.h> #include <string.h> int main() { char s1[1001]; char s2[1001]; gets(s1); gets(s2); int len1=strlen(s1); int len2=strlen(s2); for(int i=0;i<len1&&i<len2;i++) {if (s1[i]!=s2[i]){ printf("%d",i); return 0; } } if(len1==len2){ printf("-1"); } if (len1<len2){ printf("%d",len1);} if (len1>len2){ printf("%d",len2); } } return 0; }
这段代码试图比较两个字符串,找出第一个不同字符的位置,如果完全相同则输出-1,如果一个是另一个的前缀则输出较短字符串的长度。代码逻辑基本正确,但存在几个问题。

- 函数 `gets` 是不安全的,因为它不检查缓冲区大小,可能导致缓冲区溢出。应该使用 `fgets` 代替。
- 最后的 `return 0;` 放在了花括号外面,导致语法错误。`return 0;` 应该放在 `main` 函数的最后,在最后一个花括号之前。

- 当两个字符串长度不同且一个字符串是另一个的前缀时,你的代码会输出较短字符串的长度,这是正确的。但注意,如果长度相同且完全相等,你输出了-1,这也是正确的。不过,你的条件判断顺序可能导致在长度相等时先输出-1,但后面还有对 `len1<len2` 和 `len1>len2` 的判断,这些条件在长度相等时不会执行,所以没问题。但为了清晰,可以考虑用 `else if` 避免不必要的检查。