1.次の 2 つの初期化の違いは何ですか。
違いは、他の人がすでにこれについて語ったように、エラーのコンパイルと実行時チェックです。
char *string = "こんにちは世界"; ---> 読み取り専用データ セグメントに格納され、変更できませんが、値を変更してもコンパイラはエラーを出さず、実行時にのみ発生します。
const char *string = "Hello world"; --->これは、const として宣言されているため、コンパイル時にチェックされる読み取り専用データ セグメントにも格納されるため、文字列の値を変更すると、コンパイル時にエラーが発生します。実行時の失敗。
2.文字列の動的割り当ての適切な使用方法を教えてください。
char *str = (char *)malloc(sizeof(char));
scanf("%s",str);
printf("%s\n",str);
このコードは、しばらくの間は機能する可能性がありますが、常に機能するとは限りません。プログラムが所有していないにアクセスしているため、 が発生しrun-time
たときに問題が発生します。非常に危険な.segmentation fault
area of memory
dynamic memory allocation
error at run time
あなたは常にすべきallocate the amount of memory you need correctly
です。ほとんどのエラーは、割り当て中に発生します。そこと割り当て中にuse of string
常に心に留めておく必要があります。is a '\0' character present at last of the string
your responsibility to allocate memory for this.
お役に立てれば。