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

#include <stdio.h> void my_strcat(char dst[], char src[]){ int m=0,n=0; while(src[m]!='\n'||src[m]!='\0'){ if(src[m]>='a'&&src[m]<='z'){ dst[n]=src[m]; n++; } m++; } int t=0; while(dst[t]!='\0'){ printf("%c",dst[t]); t++; } } int main() { char n[1000]={"abc.def."},answer[1000]; my_strcat(answer,n); return 0; }
这段代码定义了一个 `my_strcat` 函数,试图将源字符串中的小写字母复制到目标字符串中,然后打印目标字符串。但代码有几个问题。

- 循环条件 `while(src[m]!='\n'||src[m]!='\0')` 逻辑有误。这个条件永远为真,因为一个字符不可能同时等于换行符和空字符,所以 `||` 导致条件始终成立,循环会一直运行直到越界。
- 函数名 `my_strcat` 暗示拼接字符串,但实际行为是过滤小写字母并复制,与名称不符。
- 目标字符串 `dst` 在函数中没有以空字符结尾,可能导致后续打印时出现乱码或无限循环。
- `main` 函数中 `answer` 数组未初始化,且调用 `my_strcat` 后没有打印换行或处理结果。

- 检查循环条件:思考如何正确判断字符串结束。通常用 `src[m] != '\0'` 即可。
- 在复制完成后,记得给 `dst` 数组末尾添加空字符 `'\0'`,这样打印时才能正确停止。