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

标签 c pointers pass-by-reference pass-by-value string-literals

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

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

调用这个函数

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

如何用 Australia 更新字符串文字名称(现在等于 new Holland)的值。

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

最佳答案

试试这个:

#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;
}

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

关于c - 修改作为函数传入的字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992772/

相关文章:

C编程: malloc() inside another function

c++ - 按值传递或按引用传递

python - 将变量和列表传递给 Python 中的函数

C: 做 sizeof(((SomeStruct *) 0)->some_member) 的更好方法?

c - 为什么程序在扫描输入之前终止?

c - 如何将字符串化的二进制文件(由 "1"和 "0"组成的字符串)转换为相应的 char 字符串

c - 为什么我不能通过它的指针访问这个结构?

函数中的 C++ const 参数

c - 指针递增和解引用(需要左值错误)

c - 通过引用传递动态结构? [C]