为什么我在将 char 数组作为参数传递给函数并为其分配新值时无法修改它?

问题描述 投票:0回答:1
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";

但不知何故,第一种方法有效,而第二种方法无效。为什么会发生这种情况,我该如何解决这个问题?

arrays c pointers pass-by-reference string-literals
1个回答
0
投票

在第一个示例中,您只是更改本地字符指针

name
指向的内容,使其指向字符串文字
"Marcus"
。这对
main
中的数组没有影响。

在第二个示例中,您使用

strcpy
修改指针指向的数据。值得注意的是,由于您没有传递
changeName
关于指针指向的 char 数组有多大的任何信息,因此存在潜在的缓冲区溢出错误。

© www.soinside.com 2019 - 2024. All rights reserved.