は複数の問題があります。
void foo(char *foo, int baa)
{
if (baa)
foo = "ab";
else
foo = "cb";
}
このコードは、ローカルポインタを変更しますが、それを何もしません。周りの文字列をコピーするには、同じインターフェイスを保つためにstrcpy()
を使用する必要があります。
void foo(char *foo, int baa)
{
if (baa)
strcpy(foo, "ab");
else
strcpy(foo, "cb");
}
しかし、それを行う前に、あなたは変更可能メモリでファンクションポイントでそのfoo
を確保する必要があると思います。呼び出し元のコードのことを確認するように変更する必要があります
char x[] = "baa";
foo(x, 1);
printf("%s\n", x);
を別の方法として、あなたはポインタとしてx
を維持し、機能インタフェース修正することができます
void foo(char **foo, int baa)
{
if (baa)
*foo = "ab";
else
*foo = "cb";
}
、呼び出しシーケンス:
char *x = "baa";
foo(&x, 1);
printf("%s\n", x);
を
どちらのメカニズムも機能しますが、異なる方法で機能します。それぞれにさまざまな問題があります。ただ一つの「これはそれよりも良い」決定ではない。表示されるコードフラグメントの範囲外の状況によります。
が重複する可能性(http://stackoverflow.com/questions/4016765/tutorial-on-c-pointers) –
もし(BAA) ?それはブール値ではなく、これは法的にcであるのですか? – Induster
@Induster Cにブール型はありません。すべてのブール論理はintで行われます。 – Phonon