Eingabe rückwärts ausgeben in C?


27.10.2021, 15:21
#include <stdio.h>

int main(int argc, char *argv[]) {


    char Eingabe[40], Ausgabe[40];
    int i, j;
    for(i=0; i<40; i++) {

        Eingabe[i] = 32;
        Ausgabe[i] = 32;
    }

    scanf("%s", &Eingabe[0]);

    for(i=0; i<40; i++) {

        Ausgabe[40-i] = Eingabe[i];


     


    }

    printf("%s", Ausgabe);

  
    return 0;
}

3 Antworten

Dein Array hat die Länge 40, das heißt, es gibt Indizes von 0-39. Mit Ausgabe[40] erzeugst du einen nicht erlaubten Speicherzugriff.

Woher ich das weiß:Studium / Ausbildung – Masterstudium Elektrotechnik - Schwerpunkt Embedded Systems
xpwNx 
Fragesteller
 27.10.2021, 15:43

Klar, logisch, vielen Dank! Immer diese kleinen Leichtsinnsfehler -.- Ich habe nur ein kleines Problem noch: Die Ausgabe ist noch ein Hindernis, denn die ist nur voller Leerzeichen (vmtl aufgrund der Leerzeichen-Initialisierung oben, aber gibt es da einen Trick das zu umgehen?).

0
Ausgabe[40-i]

Ausgabe enthält 40 Elemente von 0 bis 39. Schreibe nicht in das 40.ste!

Die Nutzer "mjutu" und "Gehilfling" haben recht.

Hab dein Programm angepasst:

#include <stdio.h>
#include <string.h>


int main(int argc, char *argv[]) {

    char Eingabe[40], Ausgabe[40];
    int i, j;

    scanf("%s", Eingabe);
    
    int n = strlen(Eingabe);
    
    for(i=0; i<n; i++) {
        Ausgabe[n-1-i] = Eingabe[i];
    }

    printf("%s", Ausgabe);

    return 0;
}


Woher ich das weiß:Studium / Ausbildung – Informatik studiert und mit PCs & Technik beschäftigt
xpwNx 
Fragesteller
 27.10.2021, 15:50

Gibts auch einen Weg nur mit der stdio.h Bibliothek? Das wäre super:)

0
xpwNx 
Fragesteller
 27.10.2021, 16:14
@ranger1111

Komme irgendwie imemr noch auf keinen grünen Zweig. Irgendwas übersehe ich:D

0
mjutu  27.10.2021, 16:47
@xpwNx

Der String Ausgabe muss noch 0 terminiert sein. Am besten befüllst du ihn zunächst per memset mit Nullen.

0
ranger1111  27.10.2021, 18:28
@xpwNx

scanf liefert als Return wert die Anzahl gelesenen Zeichen zurück.

0
ranger1111  27.10.2021, 18:28
@mjutu

Stimmt, nur wenn strcpy() genutzt wird, geschieht dies automatisch.

0
xpwNx 
Fragesteller
 28.10.2021, 11:08
@ranger1111

Also quasi die stringlength Funktion ersetzen? Aber wie kann ich dann den Return-Wert auslesen? Tut mir Leid für die vielen Fragen hatte noch nie was mit Coden am Hut und evrsuche es mir näher zu bringen:D

0
ranger1111  28.10.2021, 11:42
@xpwNx

Du schreibst halt sowas wie

n = scanf("%s", Eingabe);

Dann hast du in der Variable n die Länge der Eingabe stehen.

0