#include <stdio.h>
void stringcopy(char *, char *);
int main(void)
{
char *a="akash";
char *b;
stringcopy(a,b);
printf("%s",b);//why this is null?
return 0;
}
void stringcopy(char*a,char*b)
{
b=a;
printf("%s\n",b);// it is not null
}
块引用 在函数stringcopy中,我输出正确。但是在电话中我在main.why中变为空 它正在发生?请解释一下?
答案 0 :(得分:3)
在stringcopy
返回后它不起作用,因为在C函数中,参数是按值传递的,因此b
将保持不变(在a
的本地副本上进行赋值和b
)。它只在功能内修改。阅读call stack。
将a
和b
的地址传递给stringcopy
,并在功能内取消引用它们。
#include <stdio.h>
void stringcopy(char**, char**);
int main(void)
{
char *a = "akash";
char *b;
stringcopy(&a, &b);
printf("%s\n",b);
return 0;
}
void stringcopy(char** a,char** b)
{
*b = *a;
printf("%s\n", *b);
}
请注意,这只会使b
指向存储字符串文字"akash"
的内存区域,因此不会完全复制字符串。