2017-11-04 4 views
-2
  1. Ich habe einen Code für die Länge einer Zeichenfolge geschrieben.
  2. Dies wird erfolgreich kompiliert kaufen gibt es ein Problem bei der Ausgabe.
  3. Meine Ausgabe bleibt hängen, nachdem ich die Zeichenfolge eingegeben habe.
  4. i die Länge mit Zeigern
#include<stdio.h> 
int leng(char*); 
void main() 
{ 
    char str[20]; 
    scanf("%s",str); 
    printf("%s",str); 
    int l; 
    l=leng(str); 
    printf("%d",l); 
} 

int leng(char*p) 
{ 
    int l=0; 
    while(*p!='\0') 
    { 
     l++; 
    } 
    return l; 
} 
+0

Die Schleife in 'leng()' testet den Wert von '* p', ändert aber niemals' p' oder '* p'. Es ist daher eine Endlosschleife. – Peter

+0

..etwas, das wäre offensichtlich gewesen, wenn Sie Ihren Debugger verwendet haben, auch nur ein paar wichtige Vars jedes Mal ausgedruckt :(Bitte schreiben Sie nicht mehr Code, bis Sie Ihren Debugger verwenden können. –

Antwort

2

In Ihrem Code finden haben, Problem ist hier

while(*p!='\0') 

Zeiger Hier *p erhöht sich nicht. so, während Schleife unendlich funktioniert und kann Programm abgestürzt sein.

So

while(*p++!='\0') 

statt

while(*p!='\0') 
+0

Betrachten Sie die Bearbeitung zu p + = sizeof (char) seit ++ funktioniert nur für Architekturen, wo Char Byte-Größe ist. –

+1

ohh..das war so ein dummer Fehler. Vielen Dank rsp für die Hilfe. –

+0

@CaioSym: sizeof (char) ist per Definition immer 1, so dass das nicht ist Außerdem berücksichtigt der ++ Operator die Größe, so dass er für alle Datentypen unabhängig von der Größe funktioniert. –

0
#include<stdio.h> 
int leng(char*); 
int main() 
{ 
    char str[20]; 
    scanf("%s",str); 
    printf("%s", "Length of input string is "); 
    int l; 
    l=leng(str); 
    printf("%d",l); 
    } 

int leng(char*p) 
{ 
int l=0; 
while(*p!='\0') 
{ 
    l++; 
    p = p +1; 
} 
return l; 
} 
+0

danke viel usman –

-1

1. verwenden fehler- Sie nicht verwendet haben '&' innerhalb scanf. 2. Fehler - Sie müssen p ++ nach l ++ innerhalb der While-Schleife setzen.

+0

Es ist in Ordnung. Wird beim Lesen einer Zeichenfolge nicht in der scanf-Funktion verwendet. – rsp

+1

'&' würde in diesem Fall falsch sein. –

+0

Ok. Es funktioniert ohne &. Aber warum ist es nicht in Strings wie in ganzen Zahlen notwendig? – Shashwat

Verwandte Themen