Online Compiler C

#include <stdio.h> int main(void) { char s1[1005] = {0}; char s2[1005] = {0}; scanf("%[^\n]",s1); getchar(); scanf("%[^\n]",s2); int i=0; while (s1[i]!='\0'&&s2[i]!='\0'&&s1[i]==s2[i]){ i++; } if (s1[i]=='\0'&&s2[i]=='\0'){ printf("-1\n"); }else{ printf("%d\n", i); } return 0; }
这段代码的功能是比较两个字符串,找到它们第一个不同字符的位置(索引从0开始)。如果两个字符串完全相同,则输出-1。

代码的主要逻辑是:用while循环逐个比较字符,当遇到不同字符或某个字符串结束时停止。循环结束后,如果两个字符串都结束了(即完全相等),输出-1;否则输出停止时的位置i。

- 注意:当两个字符串长度不同但短字符串是长字符串的前缀时,循环会在短字符串结束时停止。此时s1[i]和s2[i]中一个是'\0',另一个不是,所以会输出短字符串的长度。这个行为是否符合题目要求?请检查题目是否要求在这种情况下输出短字符串的长度,还是其他结果。

- 另外,代码中第一个scanf读取第一行后,用getchar()消耗换行符,但第二个scanf同样使用"%[^\n]",如果第二行是空行(直接回车),这个格式会读取失败,导致s2内容未定义。考虑是否需要处理空行的情况。