char* my_strcpy(char* dest, const char* str) { while (dest != '\0') { *dest = *str; dest++; str++; } *dest = '\0'; } int main() { char* (*pf)(char*, const char*) = my_strcpy; char* (*pfArr[4])(char*, const char*) = { my_strcpy,my_strcpy,my_strcpy,my_strcpy }; printf("%s ", pf("abcdef","wlzero")); return 0; }
时间: 2023-12-19 13:07:31 浏览: 32
这段代码存在一些问题,其中最明显的问题是 `my_strcpy` 函数没有返回值,应该将其返回类型改为 `char*`,并且在函数结束前返回 `dest` 指针。此外,在使用函数指针和函数指针数组时,应该使用函数名作为函数指针或数组元素,并且在调用函数指针时需要加上括号。修改后的代码如下:
```
#include <stdio.h>
char* my_strcpy(char* dest, const char* str) {
char* ret = dest; // 保存目标字符串首地址
while (*str != '\0') {
*dest = *str;
dest++;
str++;
}
*dest = '\0';
return ret; // 返回目标字符串首地址
}
int main() {
char* (*pf)(char*, const char*) = my_strcpy;
char* (*pfArr[4])(char*, const char*) = { my_strcpy, my_strcpy, my_strcpy, my_strcpy };
printf("%s ", pf("abcdef", "wlzero"));
return 0;
}
```
这样修改后,代码就可以正确地输出 "wlzero" 了。