私はCで遊んでいて、このエラーに遭遇しました:
#include <stdio.h>
int main ()
{
char* foo;
scanf("%s", foo);
printf("entered %s", foo);
return 0;
}
scanf
ポインタを取り、ポインタfoo
ですが、バスエラーが発生します。どうすればそれを機能させることができますか?
初期化することは決してないfoo
ので、メモリ内の多かれ少なかれランダムな場所を指します。スタックに割り当てます。
char foo[10];
または、ヒープ上でそれをmallocします。
char *foo = (char *)malloc(10 * sizeof(char));
ただし、mallocを使用する場合は、free()を忘れないでください。
そして、バッファオーバーフローに注意してください。何かがバッファを取り込んでも最大サイズがない場合は、十分に注意してください。scanf
たとえば、の最大長を指定できます%9s
。scanf
ただし、終了するnullは考慮されないため、バッファーの長さより1つ短い値を渡す必要があります。