#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”所指向的位置。为什么它没有指向该位置。
答案 0 :(得分:3)
C是一种按值传递的语言。 C FAQ的This question可以回答您的问题。请注意,即使您修复了函数原型,您的算法也不会复制字符串 - 只是一个指针。您可以使用以下命令替换该呼叫:
d = s;
在main
功能中。 malloc
也是不必要的 - 你只是泄漏它。
答案 1 :(得分:2)
这是因为c
语言是按值传递的。而是传递指针的地址。
void my_strcpy(char *sour,char **dest)
// Condition checking and then do -
*dest = sour ;
答案 2 :(得分:1)
这里* d和* s是两个指针你只是复制存储在s指针中的地址,该指针指向一个数组并且数组包含“Angus Declan R”, d不能指向地址
当你声明/定义像
时int * s =“Angus Declan R”; ---&GT;最初在代码段(它是只读区域)中创建一个数组,s现在指向该数组的基地址。即使你不能使用* s.u直接访问字符串,也只能使用地址打印/访问。
唯一的原因是在内存的代码段区域中创建了数组。
这里%s通过使用基地址打印值/字符串/ char,直到遇到空值。 malloc是不必要的, in void my_strcpy()dest = sour;也没必要。它就像d = s;
如果解释不好,请原谅。