使用scanf读取字符串时程序崩溃

时间:2017-09-27 21:41:38

标签: c++ scanf

我的程序总是在类函数中的第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来学习不同的输入方法。

2 个答案:

答案 0 :(得分:0)

此处的问题是您无法使用RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.mydomain$ [NC] RewriteCond %{REQUEST_URI} ^/?ru(/.*)?$ [NC] RewriteCond %{REQUEST_URI} !^/?ru/sitemap.*$ [NC] RewriteRule ^/?ru(/(.*))?$ https://ru.mydomain.com/$2 [R=301,L] 来阅读scanf。您必须将std::string转换为std::string,或使用char *。您可以做的另一件事是首先从scanf读取到临时cin,然后通过执行以下操作将其转换为char *

std::string

作为评论,试图学习如何使用不同的东西没有错。 scanf("%s", &someCharPointer); std::string s = someCharPointer; scanf都有自己的冒险和不懈。

答案 1 :(得分:0)

要使用scanf读取字符串,您实际上必须具有足够大的缓冲区才能读取字符串。

char temp[100];
std::string vorname;
if(scanf("%99s", temp) ==1){
    vorname = temp;
}

使用scanf,您必须限制要读取的字符数以匹配临时缓冲区,并在使用缓冲区读取之前检查返回值。使用getline或运算符从istream中读取>>直接进入std :: string - 你的字符串变量将增长以匹配用户输入