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

#include <stdio.h> int my_strlen(char s[]) { int i = 0; while (s[i] != '.' && s[i] != '\n'&& s[i]!='\0') { i++; } return i; } void my_strcat(char dst[], char src[]){ int size = my_strlen(dst); int i=0; while (src[i] != '.' && src[i] != '\0' && src[i] != '\n') { dst[size+i] = src[i]; i++; } dst[i+size] = '\0'; } int main() { char a[6] = "asass."; char b[5]= "asas."; my_strcat(a, b); printf("%s", a); return 0; }
这段代码定义了两个字符串处理函数:`my_strlen` 计算字符串长度,`my_strcat` 将一个字符串连接到另一个字符串末尾。在 `main` 函数中,它尝试将 `b` 连接到 `a` 并打印结果。

代码存在两个主要问题:

- 在 `my_strlen` 中,循环条件检查了 `'.'` 和 `'\n'`,但标准字符串长度函数只应检查 `'\0'`。这会导致长度计算错误,因为你的字符串中包含了 `'.'` 字符。

- 在 `my_strcat` 中,你同样用 `'.'` 和 `'\n'` 作为终止条件,而不是只检查 `'\0'`。这会导致连接时提前停止,并且目标数组 `a` 的大小只有6,可能不足以容纳连接后的结果,造成数组越界。