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

#include <stdio.h> int suma(char a[]) { int i = 0; while (a[i] != '\0' && a[i] != '\n') { i++; } return i; } int sum(char a[], char b[]) { char sizea = suma(a), sizeb = suma(b); if (sizea > sizeb) { return sizeb; } if (sizea < sizeb) { return sizea; } if (sizea == sizeb) { int size = sizea; for (int i = 0; i < size; i++) { if (a[i] != b[i]) { return i; } } } return -1; } int main() { char a[1001] = "abc", b[1001] = "abc", answer = 0; // fgets(a,1001, stdin); // fgets(b,1001, stdin); // printf("a = %s\nb = %s\n",a,b); answer = sum(a, b); printf("%d", answer); return 0; }
这段代码定义了两个函数:`suma` 计算字符串长度(不包括换行符),`sum` 比较两个字符串并返回第一个不同字符的位置(从0开始),如果完全相同则返回-1。`main` 函数中硬编码了测试字符串 "abc" 和 "abc",所以输出是 -1。

你的代码有一个潜在问题:`sum` 函数中,当两个字符串长度相等且内容完全相同时,循环结束后没有返回值,但函数声明返回 `int`,这会导致未定义行为。虽然你写了 `return -1` 在循环外,但那个 `return -1` 实际上是在 `if (sizea == sizeb)` 的代码块外面,所以当长度相等且完全匹配时,函数会执行到 `if` 块结束,然后没有返回值就继续执行到函数末尾。

- 检查 `sum` 函数中 `if (sizea == sizeb)` 代码块的括号范围,确保 `return -1` 在正确的位置。
- 思考当两个字符串长度相等且完全相同时,函数应该返回什么值,以及这个返回值应该放在哪里。