Bildschirmausgabe überschreiben

OP #4871952
Hallo,
ich hätte ein Problem, ich würde gerne die Bildschirmausgabe für einen 
mit scanf() eingelesenen Text überschreiben.
1
char Zeichen[10]
2
int laenge, i;
3
printf("Geben Sie bitte 10 Zeichen ein");
4
scanf("%s",Zeichen);
5
strlen(Zeichen);
6
for(i=0;i<=Zeichen,i++) printf("*");  // Zeichen überschreiben mit '*'

Aber wie bekomme ich den Cursor an diese Stelle?

Also er soll die Eingabe überschreiben sobald man Enter gedrückt hat.

MfG
Persönliche Seite
1
char Zeichen[10]
2
int laenge, i;
3
printf("Geben Sie bitte 10 Zeichen ein");
4
scanf("%s",Zeichen);
5
strlen(Zeichen);
6
for(i=0;i<=Zeichen,i++) printf("*");  // Zeichen überschreiben mit '*'

Da sind ein paar hübsche Böcke versteckt.

Zunächst:

Wie wird in C das Ende eines Strings codiert?

Und wie lang muss ein String (d.h. ein char-Array) also sein, damit da 
eine gegebene Anzahl Zeichen hineinpasst?

Ist es also korrekt, ein char-Array mit zehn Elementen zu verwenden, 
wenn zehn Zeichen eingegeben werden sollen?

scanf ist eine ganz besonders schlechte Idee für Benutzereingaben. 
Was passiert in Deinem Programm, wenn der Benutzer auf der Tastatur 
einschläft und z.B. elf Zeichen oder noch mehr eingibt?

Welchen Sinn hat der Aufruf von strlen?

Deine for - Schleife sieht auch ... merkwürdig aus.
OP
Eigentlich nehme ich auch immer den Befehl getsf() dafür. Dann wird das 
Stringende Zeichen auch sofort eingebaut. Aber der Benutzer soll zum 
Beispiel ein Passwort eingeben. Enter drücken und dann soll dieses 
Passwort mithilfe von '*' überschrieben werden.
Gast
Daniel S. schrieb:
> wie bekomme ich den Cursor an diese Stelle?

Wie alt ist denn der Lehrer?

In C kann man den Cursor nicht einfach so Steuern, siehe etwa

http://stackoverflow.com/questions/26423537/how-to-position-the-input-text-cursor-in-c

Wenn man sich auf ein Betriebssystem festlegt is es wohl noch einfach.

Und wenn es eine ernsthafte Anwendung sein sollte, dann mag man auch 
nicht, dass das Passwort kurzzeitig am Bildschirm erscheint. Da würde 
man womöglich einzelne Tastendrücke direkt abfragen, daraus das Passwort 
zusammensetzen und immer nur ein * anzeigen. Aber auch das direkte 
Einlesen einzelner Zeichen (ohne Return) wird von C nicht direkt 
unterstützt. Irgendwas wie Getkey() order so muss man sich dann suchen, 
je nach OS.
OP
1
int main(void) {
2
    char Passwort[10];
3
    int i=0,j;
4
    do{
5
        Passwort[i]=getche();
6
        if(Passwort[i]!=8) i++;     // Normale Eingabe
7
        else{                       // Sonderfall: Backspace
8
            printf(" \b");          // Überschreibe Eingabe in Konsole
9
            if(i>0) i--;
10
        }
11
    }while(Passwort[i-1]!=13);
12
    for(j=0;j<i-1;j++)printf("*"); // Bei Drücken von Enter wird der vorherige Text überschrieben
13
}

Was haltet ihr hiervon? Unter Windows funktioniert das einwandfrei. Aber 
ich muss unter Linux programmieren. Da gibt es getche() nicht...

MfG
OP
Aber wenn ich das so mache brauche einen Befehl der die Charakter sofort 
abspeichert und nicht auf das Drücken von Enter wartet.

Gäbe es eine andere Möglichkeit, wenn ich zum Beispiel die Passwort 
Eingabe mit der Return Taste beende?
Gast
Rufus Τ. F. schrieb:

> Nicht viel. Das grundlegende Problem des buffer overflows hast Du nach
> wie vor nicht gelöst. Was geschieht, wenn der Benutzer mehr als zehn
> Zeichen eingibt?

Ich habe nicht den Eindruck, daß der TE das auch nur ansatzweise 
begreift. Da ist schlichtweg Hopfen und Malz verloren.
Gast
Das ist schon der zweite Thread, wo der Daniel versucht sein fehlendes 
Wissen
hier schnell über das Forum korrigieren zu lassen.

Lieber Daniel. Du solltest zurück zu den Basics gehen, und erst einmal 
versuchen, die Sprache C zu verstehen. z.B: Wie sehen String aus. Wie 
terminiert man Strings. Was funktioniert die Abbruchbedingung bei einer 
For-Schleife genau.
Erst wenn das alles klar ist, dann versuche dich an etwas komplizierten 
wie die Cursor-Steuerung. Lass einfach die Eingabe noch hässlich und 
versuche erst einmal ein Programm korrekt hin zu bekommen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.