0
#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' 它如何打印整个字符串(因为它没有指向字符串的初始地址)。

4

3 回答 3

1

确实dest会指向字符串的结尾。但是您不是通过使用打印字符串dest- 您是通过使用d哪个不同的变量来打印字符串。

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

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

d = malloc(sizeof(char*));

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

于 2013-03-07T19:40:41.297 回答
0

传入的d指针是指针的副本,因此函数中指针的位置/移动不会反映回调用它的位置main。虽然ddest都指向同一个内存块(至少最初是这样),并且对该内存块的任何更改都将反映在两端,但dest指针只是一个副本。

于 2013-03-07T19:39:05.087 回答
0
 my_strcpy(s,d);

C 按值传递参数。的值 d被传递给 my_strcpy,这意味着d里面的对象在你的 函数main中没有被修改。my_strcpy

于 2013-03-07T19:39:05.877 回答