Online Compiler C

#include <stdio.h> void my_strcpy(char dst[], char src[]) { long long int p = 0; while(dst[p] != '.') { src[p] = dst[p]; p++; } src[p] = '\0'; } int main() { char s[1000] = "hello."; char to[1000] = "abcdefgh"; my_strcpy( s, to); printf("string = %s\n", to); return 0; }
这段代码试图实现一个字符串拷贝函数,但有几个关键问题。

- 函数名是 `my_strcpy`,但参数顺序是 `dst` 和 `src`,这容易混淆。通常 `strcpy(dest, src)` 是把源复制到目标。
- 循环条件 `dst[p] != '.'` 是检查目标字符串中是否出现点号,而不是检查字符串结束符 `'\0'`。这会导致只复制到第一个点号为止,而不是整个字符串。
- 代码中把 `dst` 的内容复制到 `src`,但根据参数命名和 `main` 中的调用,你可能想反方向复制。

- 检查循环条件:字符串的结束标志是 `'\0'`,不是点号。你需要用 `dst[p] != '\0'` 来判断是否到达字符串末尾。
- 确认参数顺序:在 `main` 中你调用 `my_strcpy(s, to)`,但函数内部把 `dst` 复制到 `src`。思考一下哪个数组是源,哪个是目标,并调整函数内的赋值方向。