void changeName(char* name) {
//other action
//strcpy(name, "String"); -- this working
name = "Marcus"; // -- this not working
}
int main() {
char name[10] = "Jeremy";
printf("%s\n", name);
changeName(name);
//Aspected result: Marcus
//Actual result: Jeremy
printf("%s\n", name);
return 0;
}
在提供的源代码中,当尝试通过将 char name[50] 数组传递给函数来将其从“Jeremy”修改为“Marcus”时,我遇到了分配问题。我尝试了两种方法:
方法一:
strcpy(name, "String");
方法二:
name = "Marcus";
但不知何故,第一种方法有效,而第二种方法无效。为什么会发生这种情况,我该如何解决这个问题?
在第一个示例中,您只是更改本地字符指针
name
指向的内容,使其指向字符串文字 "Marcus"
。这对 main
中的数组没有影响。
在第二个示例中,您使用
strcpy
修改指针指向的数据。值得注意的是,由于您没有传递 changeName
关于指针指向的 char 数组有多大的任何信息,因此存在潜在的缓冲区溢出错误。