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 10:07:31 浏览: 148
这段代码存在一些问题,其中最明显的问题是 `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" 了。
相关问题
char* my_strcpy(char *dest,const char str) { } char* (*pf)(char*,const char*) = my_strcpy;找问题
根据你提供的代码片段,我注意到了一些问题:
1. 函数声明中的参数类型错误:在函数声明中,参数`str`应该是指向字符数组的指针,而不是单个字符。因此,函数声明应该是`char* my_strcpy(char *dest, const char *str)`。
2. 函数定义中的参数类型错误:在函数定义中,参数`str`应该是指向字符数组的指针,而不是单个字符。因此,函数定义应该是`char* my_strcpy(char *dest, const char *str) { }`。
3. 函数实现缺失:在函数定义中,需要实现将源字符串复制到目标字符串的逻辑。你可以使用循环来逐个复制字符,直到遇到字符串结束符`\0`。
4. 函数指针声明错误:在声明函数指针时,应该使用括号将指针类型括起来,而不是将整个声明语句放在括号中。因此,函数指针声明应该是`char* (*pf)(char*, const char*) = my_strcpy;`。
修正后的代码如下所示:
```c
char* my_strcpy(char *dest, const char *str) {
// 实现将源字符串复制到目标字符串的逻辑
int i = 0;
while (str[i] != '\0') {
dest[i] = str[i];
i++;
}
dest[i] = '\0'; // 添加字符串结束符
return dest;
}
char* (*pf)(char*, const char*) = my_strcpy;
```
实现以下函数 char *my_strcpy(char *dest,char const *src); char *my_strncpy(char *dest,char const *src,int len); char *my_strcat(char *dest,char const *src); char *my_strncat(char *dest,char const *src,int len); int my_strcmp(char *str1,char const *str2); int my_strncmp(char *srr1,char const *str2,int len);
下面是实现上述函数的示例代码:
```c
#include <stdio.h>
char *my_strcpy(char *dest, char const *src) {
char *temp = dest;
while ((*dest++ = *src++))
;
return temp;
}
char *my_strncpy(char *dest, char const *src, int len) {
char *temp = dest;
while (len > 0 && (*dest++ = *src++)) {
len--;
}
if (len > 0) {
*dest = '\0';
}
return temp;
}
char *my_strcat(char *dest, char const *src) {
char *temp = dest;
while (*dest) {
dest++;
}
while ((*dest++ = *src++))
;
return temp;
}
char *my_strncat(char *dest, char const *src, int len) {
char *temp = dest;
while (*dest) {
dest++;
}
while (len > 0 && (*dest++ = *src++)) {
len--;
}
if (len > 0) {
*dest = '\0';
}
return temp;
}
int my_strcmp(char *str1, char const *str2) {
while (*str1 && (*str1 == *str2)) {
str1++;
str2++;
}
return *(unsigned char *)str1 - *(unsigned char *)str2;
}
int my_strncmp(char *str1, char const *str2, int len) {
while (len > 0 && *str1 && (*str1 == *str2)) {
str1++;
str2++;
len--;
}
if (len == 0) {
return 0;
}
return *(unsigned char *)str1 - *(unsigned char *)str2;
}
int main() {
char dest[100] = "Hello";
char src[] = "World";
printf("strcpy: %s\n", my_strcpy(dest, src));
char dest2[100] = "Hello";
printf("strncpy: %s\n", my_strncpy(dest2, src, 3));
char dest3[100] = "Hello";
printf("strcat: %s\n", my_strcat(dest3, src));
char dest4[100] = "Hello";
printf("strncat: %s\n", my_strncat(dest4, src, 3));
char str1[] = "abc";
char str2[] = "abc";
printf("strcmp: %d\n", my_strcmp(str1, str2));
char str3[] = "abcd";
char str4[] = "abce";
printf("strncmp: %d\n", my_strncmp(str3, str4, 3));
return 0;
}
```
上述代码演示了如何实现 `my_strcpy`、 `my_strncpy`、 `my_strcat`、 `my_strncat`、 `my_strcmp` 和 `my_strncmp` 函数。你可以根据需要调用这些函数,并根据具体的参数和返回值进行相应的操作。
阅读全文
相关推荐
















