次のコードを書きました。
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
は、int x; printf("%d\n", x);
のように、初期化なしで使用されています。使用する前にポインタを何かに向ける必要があります。あなたはどの本を読んでいますか?
pointers
は、単一化されたポインターです。あなたはそれに書き込むことができません。 arrays
で行ったように、文字列を格納するのに十分なメモリを割り当てる必要があります。ポインターを使用すると、動的割り当てを使用できます(malloc
を参照)。
エラーについて詳しく教えてもらえますか?私は今コンパイラの周りにいません。
しかし、scanfとprintfが機能するためには、これをプログラムの先頭に置く必要があります。
#include <stdio.h>
#include <stdlib.h>
どちらもCの標準ライブラリです。IOにはscanfが含まれています。printfが同じであることは確かです。しかし、どのライブラリにどのライブラリが必要かがわかるまでは、両方を含めることで害はありません。すべてのプログラムの標準ライブラリ。すべてのファイルに大量の#includeを必要としないように、カスタムヘッダーファイルも使用するようにしてください。
メモリ割り当てのためのmalloc
ステートメントを忘れないでください。
しかし、あなたが自分のコードで何をしようとしているのかよくわかりません。詳しく説明してください。