修改字符串字面传过来的函数(Modifying string literal passed in a

2019-08-17 02:43发布

如果我在程序的功能

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 HOLLAND)。

我认为,我所面临的问题是new_name的是本地存储,因此函数返回后,该变量不存储

Answer 1:

试试这个:

#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参数是按值传递的,所以你需要传递指针要修改的对象。



Answer 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的到本地数组变量兵到外字符串文字。



文章来源: Modifying string literal passed in as a function