Онлайн компилятор 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++; s1++; s2++; } if (len1 == len2) { return -1; } if (len1 < len2) { return len1; } if (len1 > len2) { return len2; } return 0; } 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; }
这段代码实现了一个字符串比较函数 `is_same`,它比较两个字符串并返回第一个不同字符的位置(从0开始),如果完全相同则返回-1,如果一个字符串是另一个的前缀则返回较短字符串的长度。主函数从标准输入读取两行字符串(每行最多1000个字符),然后调用 `is_same` 并打印结果。

- 在 `is_same` 函数中,你同时使用了指针 `s1`、`s2` 和索引 `i` 来访问字符。注意当 `s1` 和 `s2` 递增后,`s1[i]` 实际上访问的是从当前指针位置偏移 `i` 的位置,这会导致访问越界或错误字符。你应该只使用一种方式(要么全部用指针,要么全部用索引)来遍历字符串。

- 函数返回值的逻辑需要仔细检查:当两个字符串长度不同时,你返回了较短字符串的长度,但题目要求可能不同。另外,当字符串完全相同(长度相等且所有字符相等)时,你返回了-1,但循环结束后如果长度相等却没有返回-1的情况需要确认。