[英]Program crashes on scanf(“%x”,&foo) when trying to input hex values
[英]Program crashes when using scanf to read strings
我的程序总是在类函数中的第 5 个 scanf 之后崩溃。
class PersoenlicheDaten{
public:
void eingabe(){
printf("Bitte geben sie jetzt ihre Persoenlichen Daten ein: \n\n");
printf("Vorname: ");
scanf("%s", &vorname);
printf("Nachname: ");
scanf("%s", &nachname);
printf("Alter: ");
scanf("%d", &alter);
printf("Geburtsdatum: ");
scanf("%s", &geburtsdatum);
printf("Addresse: ");
scanf("%s", &addresse);
}
private:
std::string vorname;
std::string nachname;
int alter;
std::string geburtsdatum;
std::string addresse;
};
内部main
:
do{
pd.eingabe();
printf("Sind sie mit der eingabe zufrieden?\n\n");
printf("Antwort(j/n): ");
scanf("%c", &v.antwiederholen);
if(v.antwiederholen == 'j'){
v.running = true;
}else{
v.running = false;
}
}while(v.running);
为什么会这样,因为它通常应该可以工作。 我也想使用 scanf 而不是 std::cin 来学习不同的输入方法。
这里的问题是你不能使用scanf
来读取std::string
。 您必须将std::string
转换为char *
,或使用cin
。 您可以做的另一件事是首先从 scanf 读取到临时char *
,然后通过执行以下操作将其转换为std::string
:
scanf("%s", &someCharPointer);
std::string s = someCharPointer;
作为评论,尝试学习如何使用不同的东西并没有错。 scanf
和cin
各有优缺点。
要使用 scanf 读取字符串,您实际上必须有足够大的缓冲区来读取字符串。
char temp[100];
std::string vorname;
if(scanf("%99s", temp) ==1){
vorname = temp;
}
使用 scanf,您必须限制要读取的字符数以匹配您的临时缓冲区,并在使用缓冲区读取之前检查返回值。 当使用 getline 或 operator>> 从 istream 直接读取到 std::string 时 - 您的字符串变量将增长以匹配用户输入
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.