次のコードが無効なのはなぜですか?
void foo()
{
char hello[6];
char *foo = "hello";
hello = foo;
}
しかし、次のコードはどのように有効なのでしょうか?
void foo()
{
char hello[] = "hello";
char *foo = hello;
}
次のコードが無効なのはなぜですか?
void foo()
{
char hello[6];
char *foo = "hello";
hello = foo;
}
しかし、次のコードはどのように有効なのでしょうか?
void foo()
{
char hello[] = "hello";
char *foo = hello;
}
配列をポインターとして割り当てようとしています。これは無効です。配列は、左辺値として使用できないという点でポインター定数に似ています。別の場所を指すように再割り当てすることはできません。最も近い方法は、foo の内容を hello にコピーすることです。
2 番目のケースでは、hello は char の配列であり、foo は char へのポインターです。一般に、配列は同じ型のポインターと交換可能であるため、これは有効です。
"hello"
stringが にコピーされると思いますhello
。それは間違っています。ポインターを別のポインターに割り当てようとしています。また、 に割り当てることはできませんhello
。
正しい方法は次のとおりです。
strcpy(hello, foo);
最初のケースでは、間違っている foo ポインターに文字列を割り当てています。2番目のケースのように、charの配列があり、それをfooポインターに渡しています