修改作为函数传入的字符串文字

pai*_*ind 4 c pointers pass-by-reference pass-by-value string-literals

如果我在程序中有一个函数

int main(){
   char *name = "New Holland";
   modify(name);
   printf("%s\n",name);
}
Run Code Online (Sandbox Code Playgroud)

调用这个函数

void modify(char *s){
   char new_name[10] = "Australia";
   s = new_name;         /* How do I correct this? */
}
Run Code Online (Sandbox Code Playgroud)

如何使用澳大利亚更新字符串文字名称(现在等于新荷兰)的值。

我认为我面临的问题是new_name是本地存储,所以函数返回后,变量没有存储

per*_*eal 7

尝试这个:

#include <stdio.h>

void modify(char **s){
  char *new_name = "Australia";
  *s = new_name;
}

int main(){
  char *name = "New Holland";
  modify(&name);
  printf("%s\n", name);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果你定义new_name为一个数组,那么它将成为一个局部变量,而不是上面定义了一个指向字符串文字的指针。此外,在 C 中,参数是按值传递的,因此您需要将指针传递给要修改的对象。