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.
'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
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
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