1

次のコードが無効なのはなぜですか?

void foo()
{
    char hello[6];
    char *foo = "hello";
    hello = foo;
}

しかし、次のコードはどのように有効なのでしょうか?

void foo()
{
    char hello[] = "hello";
    char *foo = hello;
}
4

3 に答える 3

3

配列をポインターとして割り当てようとしています。これは無効です。配列は、左辺値として使用できないという点でポインター定数に似ています。別の場所を指すように再割り当てすることはできません。最も近い方法は、foo の内容を hello にコピーすることです。

2 番目のケースでは、hello は char の配列であり、foo は char へのポインターです。一般に、配列は同じ型のポインターと交換可能であるため、これは有効です。

于 2013-03-19T11:57:27.287 に答える
3

"hello"stringが にコピーされると思いますhello。それは間違っています。ポインターを別のポインターに割り当てようとしています。また、 に割り当てることはできませんhello

正しい方法は次のとおりです。

strcpy(hello, foo);
于 2013-03-19T11:58:02.290 に答える
0

最初のケースでは、間違っている foo ポインターに文字列を割り当てています。2番目のケースのように、charの配列があり、それをfooポインターに渡しています

于 2013-03-19T12:50:48.593 に答える