2016-07-12 6 views
0

Dies ist der Code, es soll eine Zeichenkette invertieren.Printf extra Zeichen bei Gelegenheit schreiben

#include <stdio.h> 
void StrRev(char str[]) { 
    int len=strlen(str); 
    char out[len]; 
    int i; 
    for(i=0;i<len;i++){ 
     out[i]=str[len-i-1]; 
    } 
    printf("%s",out); 
} 
int main(void) { 
    StrRev("TestString"); 
    return 0; 
} 

erwartete Ausgabe:

gnirtStseT 

tatsächliche Ausgabe:

[email protected] 

das gleiche passiert mit anderen Eingaben, die zwar nicht auf einige andere.

mit MingW auf Code :: Blocks zusammengestellt

+4

fehlender Nullabschluss ................. –

+0

Räume sind nicht nur Dekoration. Richtig verwendet, verbessern sie auch die Lesbarkeit erheblich. – Olaf

+0

@Sourav Sorry, aber wie füge ich das hinzu? Ich bin neu in der Codierung. –

Antwort

1

Zwei Fragen:

Sie scheitern zu #include <string.h>, so gibt es keine Erklärung für strlen. Daher wird die Funktion implizit als int strlen() deklariert. Fügen Sie das also am Anfang der Datei hinzu.

Sie fügen der umgekehrten Zeichenfolge auch nicht das nullendezeichen hinzu.

Setzen Sie nach der for-Schleife ein zusätzliches Zeichen im Array auf 0. Außerdem müssen Sie das Array vergrößern, um es anzupassen.

#include <stdio.h> 
// import declaration of strlen 
#include <string.h> 

void StrRev(char str[]) { 
    int len=strlen(str); 
    char out[len+1]; // increase length to make room for null terminator 
    int i; 
    for(i=0;i<len;i++){ 
     out[i]=str[len-i-1]; 
    } 
    out[i]=0;  // add null terminator 
    printf("%s",out); 
} 
int main(void) { 
    StrRev("TestString"); 
    return 0; 
} 
+0

danke, es hat funktioniert. obwohl die #include wurde nicht benötigt –

+2

@RicardoSilva warum dann denken, dass der Compiler eine Warnung über die fehlenden Header ausgegeben? –

+0

@Wetter Ihr Compiler hat Ihnen vielleicht eine Warnung gegeben, aber meine nicht, also wurde es für mich nicht benötigt. –

0

strlen() gibt die Länge der Zeichenfolge ohne Nullabschluss am Ende. Wenn Sie also die Zeichen kopieren, überspringen Sie am Ende die NULL. Wenn Sie einfach

int len=strlen(str) + 1; 

statt

int len=strlen(str); 

verwenden Dann sollte alles funktionieren.

+0

tun, dass die Ausgabe war einfach leerer Raum –