#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;
}
此func工作正常并打印字符串。我的疑问是指针“dest”将指向'\ 0'它如何打印整个字符串(因为它没有指向字符串的初始地址)。
答案 0 :(得分:1)
dest
确实会指向字符串的 end 。但是您不使用dest
打印字符串 - 您正在使用d
打印字符串,这是一个不同的变量。
请记住,在C和C ++中,值默认按值传递 - 因此当您调用函数my_strcpy
时,变量d
的值将复制到变量dest
中,这是仅对函数my_strcpy
本地化,对该变量的任何更改都不会影响d
。
另请注意,您不为d
变量分配足够的空间:
d = malloc(sizeof(char*));
这将为指向字符的指针分配足够的空间,这通常意味着有足够的空间容纳4个(或8个)字符。您应该为要复制的字符串分配足够的空间 plus 一个字符用于终止空字节。您要复制的字符串大小是多少?提示:strlen
应该有所帮助。
答案 1 :(得分:0)
传入的d
指针是指针的副本,因此函数中指针的位置/移动不会反映回main
中调用的位置/移动。虽然d
和dest
都指向同一块内存(至少在最初),并且对该内存块的任何更改都将反映在两端,dest
指针只是一个副本。
答案 2 :(得分:0)
my_strcpy(s,d);
C按值传递参数。 d
的值传递给my_strcpy
,这意味着d
功能中未修改main
内的my_strcpy
对象。