我試圖編寫我認爲是簡單的程序,但我遇到了一些問題。當我嘗試將字符串讀入字符指針時,出現了分段錯誤,但僅限於代碼的某些部分。我覺得這是我在字符串中閱讀的一個問題,但我沒有得到比segfault更多的信息。將字符串讀入字符時出現分段錯誤*
這裏是我的代碼:
#include <stdio.h>
#include <string.h>
int main() {
char *Q_or_U;
char *E_or_P;
int entry;
int rc;
while(1) {
printf("Would you like to query or update? (q/u): ");
rc = scanf("%s", Q_or_U);
if (rc != 1) break;
printf("received %s\n", Q_or_U);
if (strcmp(Q_or_U, "q") == 0 || strcmp(Q_or_U, "Q") == 0) {
//execution fine in this block
printf("Which entry would you like to query? ");
rc = scanf("%d", &entry);
if (rc != 1) break;
printf("received %d\n", entry);
}
else if (strcmp(Q_or_U,"u") == 0 || strcmp(Q_or_U, "U") == 0) {
//misbehaving
printf("Would you like to encrypt that message? (y/n): ");
rc = scanf("%s", E_or_P); //segmentation fault
if (rc != 1) break;
printf("received %s", E_or_P);
}
}
}
該段錯誤總是發生時試圖讀取一個字符串到我的變量E_or_P,我缺少什麼? (我是C新手)。
可能的重複[爲什麼我不能在第一次跟蹤失敗時再次在同一個變量上使用scanf](http://stackoverflow.com/questions/26478931/why-cant-i-use-scanf-on-同一變量再次當第一次失敗) – Dan
請參閱[爲什麼大家都說不要使用scanf?我應該用什麼來代替?](http://c-faq.com/stdio/scanfprobs.html) – Dan
使用'fgets'和'stdin'句柄,因爲它允許您限制將放置在您的緩衝。或者如果在POSIX系統上,使用'getline'。 – Dan