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

时间:2013-02-21 00:50:43

标签: 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? */
}

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

我认为我遇到的问题是new_name是本地存储,所以在函数返回后,变量不存储

2 个答案:

答案 0 :(得分:3)

试试这个:

#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中,参数按值传递,因此您需要将指针传递给要修改的对象。

答案 1 :(得分:2)

试试这个:

#include <stdio.h>
#include <string.h>

#define MAX_NAME_LEN  50

void modify(char *mdf){
  char *new_name = "Australia";
  strcpy(mdf,new_name);
}

int main(){
  char name[MAX_NAME_LEN] = "New Holland";
  modify(name);
  printf("%s\n", name);
  return 0;
}

使用 strcpy / memcpy 将本地数组变量绑定到外部字符串文字。