次のコードを書きました。
int main(){
char arrays[12];
char *pointers;
scanf("%s",arrays);
scanf("%s",pointers);
printf("%s",arrays);
printf("%s",pointers);
return 0;
}
`scanf("%s",pointers) と書くとエラーになるのはなぜですか?
char *pointers;
pointers
初期化する必要があります。何らかのアドレスを指すまで、文字列をスキャンすることはできません。コンピュータは、キーボードから読み取った値をどこに保存するかを知る必要があります。
int main(){
char arrays[12];
char *pointers= arrays;
scanf("%s",pointers);
printf("%s",pointers);
return 0;
}
初期化されていないメモリ内のアドレスに書き込んでいるためです。初期化されていないポインタによるメモリ ポインタへの書き込みは、未定義の動作を引き起こします。十分なメモリを割り当てます。
pointers = malloc(256);
if(!pointers)
perror("malloc");
else
scanf("%255s", pointers);
または、静的配列として宣言します。
char pointers[256];
また、scanf() の代わりにfgets()を使用することも検討してください。
fgets() に興味がある場合は、以下をお読みください。
char *pointers;
ポインター変数を作成します。pointers
デフォルトでaddress
はpointers
不定です。*pointers
が指すアドレスのデータであり、pointers
アドレスが割り当てられるまで実行できません。これを行うだけです。
char arrays[12];
char *pointers;
pointers = arrays;
scanf("%s",pointers);
pointers
単一化されたポインターです。あなたはそれに書き込むことができません。で行ったように、文字列を格納するのに十分なメモリを割り当てる必要がありarrays
ます。ポインターを使用すると、動的割り当てを使用できます (参照malloc
)。
pointers
のように、初期化せずに使用されていますint x; printf("%d\n", x);
。ポインターを使用する前に、何かを指すようにする必要があります。あなたはどの本を読んでいますか。
エラーについて詳しく教えてください。私は現在コンパイラの周りにいません。
ただし、scanfとprintfを機能させるには、プログラムの上部にこれを配置する必要があります。
#include <stdio.h>
#include <stdlib.h>
どちらもCの標準ライブラリです。IOにはscanfが含まれていますが、printfも同じであると確信しています。しかし、どのライブラリがどの関数に必要かがわかるまでは、すべてのプログラムに両方の標準ライブラリを含めることは問題ありません。すべてのファイルに大量の#includeが必要ないように、カスタムヘッダーファイルも使用してみてください。
malloc
メモリ割り当てのステートメントを忘れないでください。
しかし、コードで何をしようとしているのかわかりません。詳しく説明してください。