在线编译器 C

#include <stdio.h> int my_strlen(char s[]){ int i = 0; while (s[i]!= '.'){ i++; } return i; } int main() { char a[1001]; scanf("%[^\n]", a); printf("%d", my_strlen(a)); return 0; }
这段代码定义了一个函数 `my_strlen`,试图计算字符串的长度。但它的判断条件写错了,导致结果不正确。

- 函数 `my_strlen` 中,`while` 循环的条件是 `s[i] != '.'`,这意味着它会在遇到英文句点 `.` 时停止计数,而不是字符串结束符 `\0`。所以如果输入字符串中没有句点,循环会越界访问数组,导致未定义行为;如果有句点,则只计算到句点前的字符数,而不是整个字符串的长度。

- 在 `main` 函数中,`scanf` 使用 `%[^\n]` 读取一行输入,这可以正确读取包含空格的字符串。但 `my_strlen` 的实现有误,导致输出不是真正的字符串长度。