2016-11-06 3 views
0

ich ein Programm schreibe, die eine Benutzereingabe liest, aber ich will keine Obergrenze für seine Größe geben, also habe ich beschlossen, es ist Gedächtnis wie diese dynamisch zuzuweisen:Char Speicherzuweisung

int main(int argc, char const *argv[]) { 
    char ** INPUT; 
    char * inputSize; 
    int cl; 
    printf("Enter your operation here: \n"); 
    scanf("%s", INPUT); 
    for(cl = 0; INPUT[cl] != '\0'; ++cl); 
    inputSize = (char *) malloc((cl + 1) * sizeof(char)); 

return 0; 
} 

Dieses Programm kompiliert und ausgeführt, aber nach der Eingabe Eingabe es mit folgendem Fehler beendet:

Segmentation fault: 11 

ich beginne gerade über Zeiger zu lernen, so würde ich jemand schätzt Fehler Hinweis darauf, ich mache. Vielen Dank!

+2

Sie haben keinen Platz für INPUT reserviert. Nachdem Sie das behoben haben, was ist der Grund für Char **? – drescherjm

+2

Um zu tun, was Sie wollen (unbegrenzte Länge der Eingabezeile), müssen Sie Chunks einlesen, und wenn die Zeile nicht am Ende des Chunks endet, müssen Sie mehr lesen. Sobald Sie alle Chunks gelesen haben (zB zu einer verketteten Liste), können Sie einen einzelnen Puffer zuordnen und diese (falls erforderlich) kombinieren. – hyde

+0

Oh, richtig, ich habe es so geändert, wie zuvor, dass ich nur INPUT mit demselben Fehler zugewiesen habe. –

Antwort

0

Vielen Dank für Hilfe, ich habe gerade getline verwendet und alles in unsigned_t Puffer zugewiesen. Das funktioniert.