0

私はCで遊んでいて、このエラーに遭遇しました:

#include <stdio.h>
int main ()
{
 char* foo;
 scanf("%s", foo);
 printf("entered %s", foo);
 return 0;
}

scanfポインタを取り、ポインタfooですが、バスエラーが発生します。どうすればそれを機能させることができますか?

4

1 に答える 1

8

初期化することは決してないfooので、メモリ内の多かれ少なかれランダムな場所を指します。スタックに割り当てます。

char foo[10];

または、ヒープ上でそれをmallocします。

char *foo = (char *)malloc(10 * sizeof(char));

ただし、mallocを使用する場合は、free()を忘れないでください。

そして、バッファオーバーフローに注意してください。何かがバッファを取り込んでも最大サイズがない場合は、十分に注意してください。scanfたとえば、の最大長を指定できます%9sscanfただし、終了するnullは考慮されないため、バッファーの長さより1つ短い値を渡す必要があります。

于 2010-06-06T17:56:16.837 に答える