gpt4 book ai didi

c - 字符串复制函数

转载 作者:行者123 更新时间:2023-11-30 15:51:14 25 4
gpt4 key购买 nike

#include<stdio.h>
#include<malloc.h>
void my_strcpy(char *sour,char *dest){
if(sour == NULL || dest == NULL){
return;
}
while(*sour != '\0'){
*dest++ = *sour++;
}
*dest = '\0';
}
int main(){
char *d = NULL;
char *s = "Angus Declan R";
d = malloc(sizeof(char*));
my_strcpy(s,d);
printf("\n %s \n",d);
return 0;
}

这个函数工作正常并打印字符串。我的疑问是,由于指针“dest”将指向“\0”,它如何打印整个字符串(因为它没有指向字符串的初始地址)。

最佳答案

确实,dest 将指向字符串的结尾。但是您没有使用dest打印字符串 - 您正在使用d打印字符串,这是一个不同的变量。

请记住,在 C 和 C++ 中,默认情况下值是按值传递的 - 因此,当您调用函数 my_strcpy 时,变量 d 的值将被复制到变量 dest 仅位于函数 my_strcpy 的本地,对该变量的任何更改都不会影响 d

另请注意,您没有d 变量分配足够的空间:

d = malloc(sizeof(char*));

这将为指向字符的指针分配足够的空间,这通常意味着有足够的空间容纳 4 个(或可能 8 个)字符。您应该为要复制的字符串分配足够的空间,再加上一个字符作为终止空字节。您尝试复制的字符串的大小是多少?提示:strlen 应该有帮助。

关于c - 字符串复制函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15280174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com