我有這段代碼是應該要求用戶輸入一些信息:gets_s()是越來越跳過
char * nome = malloc(256);
char * cc = malloc(256);
char * morada = malloc(256);
char * tlf = malloc(20);
printf("Novo nome:");
gets_s(nome, sizeof(nome));
printf("Nova Morada:");
fflush(stdin);
gets_s(morada, sizeof(morada));
printf("Cartao de cidadao:");
fflush(stdin);
gets_s(cc, sizeof(cc));
printf("Novo Contacto:");
fflush(stdin);
gets_s(tlf, sizeof(tlf));
第一gets_s()
獲取的跳過,我不明白爲什麼,我已經也嘗試使用scanf("%s",nome)
,並試圖用戶通過堆棧溢出發現一些解決方案,因爲據我瞭解scanf()
會發生什麼是最後一個字符實際上是「自動」讀取的,因爲它沒有在之前的scanf()
,但我不認爲這是事實,因爲我已經嘗試了所有我能找到的建議。 任何人都可以闡明爲什麼會發生這種情況?
編輯:
char nome[256];
char cc[256];
char morada[256];
char tlf[20];
printf("Novo nome:");
fflush(stdin);
scanf("%s", nome);
printf("Nova Morada:");
fflush(stdin);
scanf("%s", morada);
printf("Cartao de cidadao:");
fflush(stdin);
scanf("%s", cc);
printf("Novo Contacto:");
fflush(stdin);
scanf("%s", tlf);
1)'fflush(stdin);'調用未定義的行爲2)您不檢查'malloc'和'gets_s'的任何結果。 3)邊界檢查接口是可選的。爲什麼不使用'fgets'? 4)指針不是數組。 5)獲取你的C書並閱讀'sizeof'的功能。 – Olaf
我感謝您的評論。首先你說「調用未定義的行爲」是什麼意思? 我已經按照你的建議使用了fgets(),但結果是一樣的,我拋棄了fflush(),因爲我從你的評論中瞭解到它的行爲沒有定義,因此它不清楚緩衝區。 仍然得到相同的結果 – LikeIfYouCaredAboutMyName
你最大的問題是以不恰當的方式使用'sizeof'。 – DyZ