#include <stdio.h>
#include <string.h>
struct acho {
char ahn[50], add[200];
long int a, bal;
};
int main() {
struct acho s;
printf("enter name: \n");
gets(s.ahn);
printf("enter number: \n");
scanf("%ld", &s.a);
printf("enter address: \n");
gets(s.add);
printf("enter balance: \n");
scanf("%ld", &s.bal);
printf("Name: %s \n", s.ahn);
printf("Account number: %ld \n", s.a);
printf("Address: %s \n", s.add);
printf("Balance: %ld \n", s.bal);
return 0;
}
為什么這段代碼不是地址的輸入?請問有人能找到bug嗎?
我已經嘗試過像gets和fgets這樣的兩種輸入法,但無論如何它都沒有輸入地址。
uj5u.com熱心網友回復:
#include <stdio.h>
#include <string.h>
struct acho {
char ahn[50], add[200];
long int a, bal;
};
int main() {
struct acho s;
printf("enter name: \n");
fgets(s.ahn,50,stdin);
printf("enter number: \n");
scanf("%ld", &s.a);
getchar();
printf("enter address: \n");
fgets(s.add,200,stdin);
printf("enter balance: \n");
scanf("%ld", &s.bal);
printf("Name: %s \n", s.ahn);
printf("Account number: %ld \n", s.a);
printf("Address: %s \n", s.add);
printf("Balance: %ld \n", s.bal);
return 0;
}
- 使用
fgets()代替gets(). gets() 本質上是不安全的,因為它將所有輸入從 STDIN 復制到緩沖區而不檢查大小。這允許用戶提供大于緩沖區大小的字串,從而導致溢位情況。 - 您的地址陳述句正在讀取換行符
getchar()在printf("enter address: \n");讀取換行符之前添加一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/359885.html
標籤:C
