2017-12-19 6 views
-4

ich einen Code schreibe, die so viel ein Benutzer einen String der Länge akzeptiert wollen und zeigt it.so das ist, was ichIch habe diesen Code geschrieben und aber es funktioniert nicht richtig

#include<stdio.h> 
#include<stdlib.h> 
void main() 
{ 
    char *a; 
    int i,n; 
    a=(char*)calloc(1,sizeof(char)); 
    printf("enter the string\t"); 
    for(i=0;a[i]!=0;i++) 
    { 
     scanf("%[^0]c",&a[i]); 
     n=2+i; 
     a=(char*)realloc(a,(n)*sizeof(char)); 
    } 
    for(i=0;a[i]!=0;i++) 
    { 
     printf("%c",a[i]); 
    } 
    free(a); 
    a=NULL; 
} 

geschrieben haben, aber es ist geht nicht in die Schleife und akzeptiert keine Eingabe. Kannst du mir sagen, was schief läuft? DANK

+0

Warum druckst du Zeichen für Zeichen, anstatt es in einen NULL-terminierten Zeichenfolgenpuffer zu legen und es direkt 'printf' zu geben? Während 'free (a)' verständlich ist, ist die Einstellung von 'a' auf' NULL' wirklich sinnlos. – tadman

+0

Normalerweise würden Sie dieses Problem angehen, indem Sie einen optimistisch großen Puffer zuweisen und wenn der Benutzer diese Größe überschreitet, die doppelte Zuweisung vornehmen. Dies vermeidet eine unnachgiebige Umverteilung. – tadman

+0

Willkommen bei Stack Overflow! [Bitte lesen Sie die Diskussion darüber, warum nicht der Rückgabewert von malloc() und family in C ..] (https://stackoverflow.com/q/605845/2173917) –

Antwort

1

Sie betreten die Schleife nicht, weil Sie a mit calloc zugeordnet, so a[0] ist 0. Es wird die anfängliche a[i]!=0 Test der beiden Ihrer for Schleifen scheitern.

+0

aber malloc() löst auch nicht das Problem –

+0

für Strings von geringer Länge, es funktioniert richtig, aber wie die Länge wächst es funktioniert nicht mehr –

+0

Das ist ein separates Problem. Ich erklärte, warum du nicht in die Loops gegangen bist. Wenn Sie mehr Hilfe benötigen, bearbeiten und aktualisieren Sie Ihre Frage. –

Verwandte Themen