2017-02-23 2 views
0

Ich habe ein Problem beim Umkehren einer Zeichenfolge mit einer Funktion. Hier ist mein Code:Fehler - subskribiert Wert ist weder Array noch Zeiger noch Vektor

#include<stdio.h> 

int str_length(char lang); 

int main() 
{ 
    char language[100]; 

    int string_length; 

    while(1==scanf("%[^\n]", language)) 
    { 
     string_length=str_length(language); 
    } 

    int i; 

    for(i=string_length; i>=0; i--) 
    { 
     printf("%c\n", language[i]); 
    } 

    return 0; 
} 

int str_length(char lang) 
{ 
    int i; 

    for(i=0; lang[i]!='\0'; i++) 
    { 
     i++; 
    } 

    return i; 
} 

Der Fehler, das gleiche ist wie der Titel in der Zeile zeigt 'for (i = 0; lang [i] =' \ 0 '; i ++)'.

Bitte helfen Sie mir, das Problem zu verstehen.

+0

'language' wird als eine Reihe von Zeichen deklariert, aber der Prototyp/Signatur für' str_length() ', sagt sie ein einziges Zeichen erwartet. Vielleicht meintest du: 'str_length (char * lang);' <- beachte die Addition des '*' – user3629249

+0

die Funktion 'str_length()' hat die Variable 'i' um die 'for()' Anweisung UND mit inkrementiert der Körper der 'for()' - Schleife, so dass der zurückgegebene Wert (etwa) das Doppelte der tatsächlichen Länge der Zeichenfolge ist. vorschlagen, schreiben: 'für (i = 0; lang [i]; i ++);' Beachten Sie, dass der zweite Parameter ist einfach wahr (nicht Null) oder falsch (0) was alles ist – user3629249

+0

in Bezug auf: 'while (1 = = scanf ("% [^ \ n]", Sprache)) 'bei Verwendung von'% [^ \ n] 'immer einen MAX CHARACTERS-Modifikator (das ist eins weniger als die Länge des Eingabepuffers), um sicherzustellen, dass die Eingabe Puffer wird nicht überlaufen. Ein solcher Überlauf führt zu undefiniertem Verhalten und kann/wird zu einem seg-Fehlerereignis führen. Schlage vor: 'while (1 == scanf ("% 99 [^ \ n] ", Sprache))' – user3629249

Antwort

2

Ihre Funktion str_length() erwartet ein char als Argument, aber Sie übergeben es eine char * (ein Zeiger, der auf eine Zeichenfolge zeigt) im Aufruf. Daher müssen Sie in Ihrem Funktionsargument die Pointer-Notation oder das Array verwenden. Wie

int str_length(char lang[]) 
{ 
    //code 
} 

oder

int str_length(char *lang) 
{ 
    //code 
} 
0

Sie müssen die Funktionsdefinition als

int str_length(char lang) 
... 

zu

int str_length(char *lang) 

Das Problem lang ist char Variable ändern, damit es nicht wie lang[i] zugegriffen werden kann. Sie beabsichtigen, es als Array oder Zeiger zu haben.

Verwandte Themen