Elemente des Arrays im dynamischen Speicher ausgeben

  • XXX ---- Ja, es ist ein Problem mit den Hausaufgaben, aber ja, ich bin festgefahren. Warum werden die Elemente des Arrays nicht ausgedruckt? Bitte helfen Sie uns --- XXX

    Ok, wir haben den Ausdruck-Teil herausgefunden. Ich danke dir sehr. Jetzt ist das Problem das einzige Zeichen, bevor das Leerzeichen in das Array eingefügt wird. Ich muss alle Wörter oder Zeichen in das Array setzen.

     int main(int argc, char** argv) {
    
        int size = 0;
        char **array = malloc(0); //malloc for dynamic memory since the input size is unknown
        static const char filename[] = "input.txt";
        FILE *file = fopen(filename, "r");
        if (file != NULL) {
            char line [ 128 ]; 
    
            char delims[] = " ";
            char *result = NULL;
            while (fgets(line, sizeof line, file) != NULL)  {
                result = strtok(line, delims); //separate by space
                size++;
                array = realloc(array, size * sizeof (char*)); //declare array with unknown size
                array[size - 1] = result;
    
            }
            fclose(file);
        } else {
            perror(filename);
        }
        return 0;
        printf(array); //print array???
        return (EXIT_SUCCESS);
    }
     
    22 November 2011
    Nu Gnoj Mik
2 answers
  • Dies ist C. Sie können printf () nicht einfach anrufen und erwarten, dass es die Arbeit für Sie erledigt. Sie müssen das Array mit einer for () - oder while () - Schleife durchlaufen und jedes Element ausdrucken.

    Angenommen, es handelt sich um ein Array von Strings:

     int i;
    for (i=0; i<size; i++)
        printf("array[%d] = %s\n", i, array[i]);
     
    22 November 2011
    Jonathon Reinhart
  • Bitte überprüfen Sie diesen Code. Ich glaube, dass es das tut, was Sie erwarten.

     #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    
    int main(int argc, char** argv) 
    {
        int size = 0;
        int i;
        char **array = malloc(0); //malloc for dynamic memory since the input size is unknown
    
        static const char filename[] = "input.txt";
        FILE *file = fopen(filename, "r");
    
        if (file != NULL) 
        {
            char line [ 128 ]; 
    
            char delims[] = " ";
            char *result = NULL;
    
            while (fgets(line, sizeof line, file) != NULL)
            {
                result = strtok(line, delims); //separate by space
    
                while( result != NULL ) 
                {                       
                    size++;
    
                    array = realloc(array, size * sizeof (char*)); //declare array with unknown size
                    array[size - 1] = malloc(100 * sizeof(char));  // allocate memory for 100 chars
                    strcpy(array[size - 1], result);               // copy the result
    
                    result = strtok( NULL, delims );
                }
            }
    
            fclose(file);
        } 
        else 
        {
            perror(filename);
        }
    
        // return 0; 
    
        for (i = 0; i < size; i++)
        {
            printf("array[%d] = %s\n", i, array[i]);
        }
    
        // printf(array); //print array???
    
        return (EXIT_SUCCESS);
    }
     
    22 November 2011
    bacchus