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

在这个我试图使指针“d”指向“s”所指向的位置。为什么它不指向该位置。

4

3 回答 3

3

C 是一种按值传递的语言。 C FAQ的这个问题可以回答你的问题。请注意,即使您修复了函数原型,您的算法也根本不会复制字符串 - 只是一个指针。您可以将该调用替换为:

d = s;

在你的main功能中。这malloc也是不必要的 - 你只是在泄漏它。

于 2013-03-08T04:17:43.420 回答
2

这是因为c语言是按价值传递的。而是传递指针的地址。

void my_strcpy(char *sour,char **dest)
// Condition checking and then do -
    *dest = sour ;
于 2013-03-08T04:17:26.283 回答
1

这里 *d 和 *s 是两个指针,您只是复制存储在 s 指针中的地址,该指针指向一个数组并且数组包含“Angus Declan R”,d 不能指向该地址

当你声明/定义像

int *s="安格斯·德克兰 R"; ---> 最初在代码段(这是只读区域)中创建了一个数组,并且 s 现在指向该数组的基地址。即使你不能直接使用 *su 访问字符串,只有选项打印/访问使用地址。

唯一的原因是在内存的代码段区域中创建的数组。

这里 %s 通过使用基地址打印值/字符串/字符,直到遇到空值。malloc 是不必要的,在 void my_strcpy() dest = sour; 也是不必要的。就像 d=s; .

如果解释不好,请原谅。

于 2013-03-08T06:05:49.543 回答