私はCを使い始めましたが、私は奇妙な問題に遭遇しました。Cのプロンプトが上書きされています
このコードは大きなプログラムの一部ですが、問題はここにありますが、わかりません。
#include <stdio.h>
#include <string.h>
#define WORDSIZE 512
int read_stdNum(const char prompt[], char store[], size_t n) {
char inHold[WORDSIZE];
char process[10];
int status = 0;
while (1) {
fprintf(stderr, "%s", prompt);
if(fgets(inHold, WORDSIZE, stdin) == NULL) {
return 0;
}
sscanf(inHold, "%s", process);
status = sscanf(process, "%s", store);
if (status > 0 && strlen(store) == n) {
return 1;
} else if (status == -1) {
continue;
} else {
continue;
}
}
}
int main(void) {
char arrow[] = "\n==> ";
char stdNum[10];
printf("%s\n", "store_student called.");
fprintf(stderr, "%s", "\nEnter a student number (axxxxxxxx)\n");
read_stdNum(arrow, stdNum, 9);
return 0;
}
プログラムは、ユーザーの入力を要求し、プログラムが追加の数字を切り捨てるため、ここでのテストですが、私は「a123456789101112131415
」のようなものを入力すると、出力が正常に動作し、何も、ありませんが、その後、プロンプトが書かれ、プロンプトは次のようになります。
==> a123456789101112131415
131415_
アンダースコアは入力可能なところです。 文字配列 'process'も9文字以上を格納しています。 私は同級生の何人かに尋ねました。また、彼のコンピュータでうまくいきました。 私はダムのために燃え盛りになるつもりだが、なぜこれが動作していないのかを知りたい。おかげさまで
あなたが読んで文字列の長さとして '9'を通過し、あなたの入力に応じて '6 '文字のみを入力します。これは 'strlen(store)!= n'を意味します。今それについて数分間考えてみましょう。その後、デバッガでプログラムを実行し、実際に何が起きているのかを一行ずつ確認します。うまくいけば、それはあなたの問題が何であるかについての手がかりを与えるはずです。 –
'sscanf'呼び出しがバッファをオーバーフローさせる可能性があります。 – interjay