4

プログラムに関数がある場合

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 がローカルストレージであるため、関数が戻った後、変数が保存されないことです

4

2 に答える 2

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

配列として定義するnew_nameと、ローカル変数になります。代わりに、上記は文字列リテラルへのポインターを定義します。また、C ではパラメーターが値渡しされるため、変更するオブジェクトへのポインターを渡す必要があります。

于 2013-02-21T01:00:41.173 に答える
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を使用して、ローカル配列変数を外部の文字列リテラルにバインドします。

于 2013-02-21T01:12:59.547 に答える