在线编译器 C

#include <stdio.h> int my_length(char c[]) { int len = 0; int i = 0; while (c[i] != '\0') { len++; i++; } return len; } int is_same(char *s1, char *s2) { int i = 0; int len1 = my_length(s1); int len2 = my_length(s2); while (*s1 != '\0' && *s2 != '\0') { if (s1[i] != s2[i]) { return i; } i++; } if (len1 == len2) { return -1; } if (len1 < len2) { return len1; } if (len1 > len2) { return len2; } } int main() { char a1[1001], a2[1001]; int i1 = 0, i2 = 0; char b; while (i1 < 1000 && (b = getchar()) != '\n') { a1[i1] = b; i1++; } a1[i1] = '\0'; while (i2 < 1000 && (b = getchar()) != '\n') { a2[i2] = b; i2++; } a2[i2] = '\0'; printf("%d", is_same(a1, a2)); return 0; }
这段代码定义了两个字符串比较函数,并在主函数中读取两行输入后输出比较结果。`my_length` 计算字符串长度,`is_same` 比较两个字符串并返回第一个不同字符的位置(从0开始),如果完全相同则返回-1,如果一个字符串是另一个的前缀则返回较短字符串的长度。

- 在 `is_same` 函数中,你同时使用了指针 `*s1` 和索引 `s1[i]` 来访问字符串,这会导致指针没有移动,循环条件 `*s1 != '\0'` 永远为真(因为指针没有前进),从而可能陷入死循环或逻辑错误。你应该统一使用一种方式,比如只通过索引 `i` 来比较字符,或者移动指针来遍历。
- 主函数中读取输入时,`getchar()` 返回 `int` 类型,但变量 `b` 声明为 `char`,这可能导致在判断文件结束符 `EOF` 时出现问题。不过这里只比较换行符,暂时不影响,但建议将 `b` 改为 `int` 类型以更安全地处理输入。