2016-04-15 9 views
-1

Ich versuche, ein Array zu erstellen, die Benutzereingaben zu speichern, und ich brauche das Array, um die genaue Länge der Benutzereingabe zu sein. Ich möchte die Länge der Benutzereingabe nehmen und diese als die Länge des Arrays verwenden. Wie kann ich das mit Strlen machen? Gibt es einen besseren Weg?mit Strlen, um die Länge der Benutzereingabe zu finden c

+3

'malloc' eine kleine Größe und" realloc "mehr Speicher wie erforderlich. –

+2

* Warum * brauchen Sie das Array, um die genaue Länge der Eingabe zu erhalten? – EOF

+2

Warum strlen? Was versuchst du zu erreichen? Was sollte dieses Array enthalten? Zahlen? Briefe ? Editiere deine Frage und sei spezifischer –

Antwort

1

Dies ist eine Möglichkeit, Speicher nach Bedarf zu erfassen. Ich würde CHUNKSIZE mehr als 4 verwenden, aber ich beschränkte es für das einfache Testen.

#include <stdio.h> 
#include <stdlib.h> 

#define CHUNKSIZE 4 

int main(void){ 
    char *text; 
    int maxlen = CHUNKSIZE; 
    int index = 0; 
    int ch; 

    text = malloc(CHUNKSIZE); 
    if(text == NULL) 
     exit(1); 
    printf("Enter your text:\n"); 

    while((ch = getchar()) != EOF && ch != '\n') { 
     text[index++] = ch; 
     if (index >= maxlen) { 
      maxlen += CHUNKSIZE; 
      text = realloc(text, maxlen); 
      if(text == NULL) 
       exit(1); 
     } 
    } 
    text[index] = 0;    // terminate 

    printf("%d You entered: %s\n", maxlen, text); 
    free(text);  
    return 0; 
} 

Programmsitzung:

Enter your text: 
A quick brown fox jumps over the lazy dog. 
You entered: A quick brown fox jumps over the lazy dog. 
+0

Nitpicking: 'maxlen' und' index' sollten mindestens 'size_t' oder' unsigned' sein. – alk

+2

@alk vereinbart, und auch in richtigen Programmen sollte das Ergebnis von 'realloc' getestet werden, bevor der ursprüngliche Wert verloren geht. –

+0

Auch die Verwendung einer Do-While-Schleife würde den ersten Aufruf von 'malloc()' überflüssig machen. Du hast mein 1+ aber ... ;-) – alk

0

Bevor Sie Ihre eigene Funktion schreiben, können Sie den folgenden Code versuchen:

char *str; 
scanf("%ms", &str); // <--- Note the & before str 

// Do something with str... 

free(str); 

Dies ist eine Erweiterung der ISO-C-Standard supported on all POSIX.1-2008-conforming systems.

Verwandte Themen