宣言後に文字列を初期化できますか?
char *s;
s = "test";
それ以外の
char *s = "test";
できますが、そのステートメントではs
、他の場所に割り当てられた読み取り専用文字列へのポインターに格納していることに注意してください。これを変更しようとすると、未定義の動作が発生します (つまり、一部のコンパイラでは動作する可能性がありますが、多くの場合、クラッシュするだけです)。そのため、通常はconst char *
そのことに a を使用します。
はい、できます。
#include <stdio.h>
int
main(void)
{
// `s' is a pointer to `const char' because `s' may point to a string which
// is in read-only memory.
char const *s;
s = "hello";
puts(s);
return 0;
}
注意: 配列では機能しません。
#include <stdio.h>
int
main(void)
{
char s[32];
s = "hello"; // Syntax error.
puts(s);
return 0;
}
引用符内の文字列はコンパイル時にコンパイラから割り当てられるため、(前述のように) ポインターの場合は正しいため、このメモリ アドレスを指すことができます。問題は、その内容を変更しようとしたとき、またはそこを指したい固定サイズの配列があるときに発生します