Online Compiler 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] , b[1001], 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; }
这段代码试图比较两个字符串,并返回它们第一个不同字符的位置(从0开始计数),如果完全相同则返回-1。但代码中存在一些逻辑问题。

- 函数 `suma` 实际上计算的是字符串长度(不包括换行符),但函数名容易让人误解为求和。
- 在 `sum` 函数中,当两个字符串长度不同时,返回的是较短字符串的长度,这不符合通常的字符串比较逻辑。通常应该返回第一个不同字符的位置,如果长度不同且前面字符都相同,则返回较短字符串的长度作为位置。
- 变量 `answer` 被声明为 `char` 类型,但 `sum` 函数返回 `int`,这可能导致数据丢失。

- 检查 `sum` 函数中当长度不同时的返回值逻辑。想一想:如果两个字符串长度不同,但前面字符都相同,应该返回什么位置?
- 注意 `answer` 的类型。`sum` 返回 `int`,但 `answer` 是 `char`,这可能会截断返回值。