Онлайн компилятор 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]; int answer = 0; scanf("%s%s",a,b); // printf("a = '%s'\n", a); // printf("b = '%s'\n", b); answer = sum(a, b); printf("%d\n", answer); return 0; }
这段代码定义了两个函数:`suma` 计算字符串长度(不包括换行符),`sum` 比较两个字符串并返回较短的字符串长度,如果长度相等则返回第一个不同字符的位置,如果完全相同则返回 -1。主函数读取两个字符串并输出结果。

- 函数 `suma` 在计算长度时,循环条件检查了 `a[i] != '\n'`,但 `scanf` 读取的字符串不会包含换行符,这个检查是多余的,但不会导致错误。
- 函数 `sum` 中,当两个字符串长度相等时,循环结束后没有返回值,如果字符串完全相同,函数会执行到末尾,但缺少明确的返回值语句,这可能导致未定义行为。