stdinから読み取るものを呼び出すときに、セグメンテーション違反が発生し続けます。理由がわかりません。getchar()
特定の関数内からまたは他の同様の関数を呼び出すと、プログラムがクラッシュしますが、別の関数から呼び出すと、正常に動作します。クラッシュする部分は次のとおりです。
int prompt()
{
int i;
int selection = -1;
while (selection < 0 || selection > 9) {
printf("Item:\n\n");
for (i = 0 ; i < 10 ; i++) {
printf("%d) %s\n", i, getItemName(i));
}
for (i = 0 ; i < 11 ; i++) {
printf("\n");
}
printf("Select the number of the corresponding item: ");
char input = getchar(); <--- dies here!
if (input != EOF && input != '\n') flush();
selection = atoi(input); <--- error here!
}
return selection;
}
void flush() {
char c = getchar();
while (c != EOF && c != '\n')
c = getchar();
}
更新多くの実験を行った後、問題はマークアウトしたコードにあることがわかりました。(atoi()
)。char
私はそれをではなく単純なものとして渡していましたchar*
。printfs
の束を使用したときに、を呼び出す前ではなく、指定した行で終了する理由がまだわかりませんatoi()
。