Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 修改作为函数传入的字符串文字_C_Pointers_Pass By Reference_Pass By Value_String Literals - Fatal编程技术网

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

C 修改作为函数传入的字符串文字,c,pointers,pass-by-reference,pass-by-value,string-literals,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

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

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)的值

我认为我面临的问题是新的_名称是本地存储,因此在函数返回后,变量不会被存储

#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;
}
#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;
}
#包括
无效修改(字符**s){
char*new_name=“澳大利亚”;
*s=新名称;
}
int main(){
char*name=“新荷兰”;
修改(&名称);
printf(“%s\n”,名称);
返回0;
}
如果将
new\u name
定义为数组,则它将成为一个局部变量,而不是上面定义的指向字符串文字的指针。此外,在C中,参数是按值传递的,因此您需要传递指向要修改的对象的指针。

尝试以下方法:

#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;
}
#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;
}
#包括
#包括
#定义最大名称长度50
无效修改(字符*mdf){
char*new_name=“澳大利亚”;
strcpy(mdf,新名称);
}
int main(){
字符名称[最大名称]=“新荷兰”;
修改(名称);
printf(“%s\n”,名称);
返回0;
}

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

此代码不修改文本。它只会改变指针。是的,对不起,我误解了