我这里有这个代码:
int main() {
char cognome[] = {};
char nome[] = {} ;
char sesso[] = {};
char giorno_n[] = {};
char mese_n[] = {};
char anno_n[] = {};
char comune[] = {};
char lettera[] = {};
int i;
printf("Programma che calcola il codice fiscale.\n");
printf("Inserisci il cognome: ");
scanf("%s", cognome);
strupr(cognome);
printf("Inserisci il nome: ");
scanf("%s", nome);
strupr(nome);
printf("Inserisci il sesso: ");
scanf("%s", sesso);
strupr(sesso);
printf("Inserisci il giorno di nascita: ");
scanf("%s", giorno_n);
printf("Inserisci il mese di nascita: ");
scanf("%s", mese_n);
printf("Inserisci l'anno di nascita: ");
scanf("%s", anno_n);
printf("Inserisci il comune di nascita: ");
scanf("%s", comune);
printf("Il comune è: %s", comune);
printf("%s", cognome);
getch();
}`
此代码存在的问题是,上一个printf("%s", cognome)
没有获取scanf("%s", cognome)
的输入值,但是它取了最后scanf("%s", comune)
的值,我真的不喜欢不明白为什么。
答案 0 :(得分:2)
您需要为每个字符串指定最大长度。
例如:
char cognome[30]; // maximum lenght of cognome is 30-1 (1 for the NUL terminator)
char nome[30]; // etc.
然后像这样拨打scanf
:
scanf("%29s", cognome);
如果用户输入的名称超过29个字符,则无法获得缓冲区溢出。