:私は文字列を変更したい場合は文字列変更関数:return voidまたはchar *?例えば
void foo1(char *buffer) {
buffer[0] = 'a';
}
char *foo2(char *buffer) {
buffer[0] = 'a';
return buffer;
}
私が行うことができます:
mystr[] = "foobar";
foo1(mystr);
printf("%s",mystr);
または戻り値使用:
mystr[] = "foobar";
char *mystr2;
mystr2 = foo2(mystr);
printf("%s",mystr2);
私は少し混乱していますが2番目の方法:mystrとmystr2は別の場所を指していますが、同じ文字列を保持しています。私はfoo2が変更されたmystrのアドレスをmystr2にコピーすると思います。代わりに何が起こるのですか?
2番目の質問は、文字列を変更する方が標準ですか?
2番目の例では、 'mystr'が変更され、' mystr2'が 'mystr'を指しています。2番目の例でも 'mystr'を印刷してみてください。 –
明確ではなく、広範囲に広がっています。質問ごとに1つの質問。 – Olaf
あなたの2番目の質問については、答えは「両方」と「なし」です。どちらが "最高"(非常に主観的)かは、ユースケースによって異なります。 2番目の方法では、たとえば次のことができます。 'printf("%s "、foo2(mystr))'は*いくつかの状況では役に立ちますが、他の状況では役に立たないでしょう。 –