字符串复制功能

时间:2013-03-07 19:37:00

标签: c

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

3 个答案:

答案 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中调用的位置/移动。虽然ddest都指向同一块内存(至少在最初),并且对该内存块的任何更改都将反映在两端,dest指针只是一个副本。

答案 2 :(得分:0)

 my_strcpy(s,d);

C按值传递参数。 d的值传递给my_strcpy,这意味着d功能中未修改main内的my_strcpy对象。