【问题标题】:Printing out elements of array located in dynamic memory打印出位于动态内存中的数组元素
【发布时间】:2012-01-03 11:44:55
【问题描述】:

XXX----是的,这是一个家庭作业问题,但是我被卡住了。为什么这不打印出数组的元素?请帮忙---XXX

好的,我们搞定了打印输出部分。太感谢了。现在问题是空格分隔符放入数组之前的唯一第一个字符。我需要将所有单词或字符设置到数组中。

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);
}

【问题讨论】:

    标签: c arrays dynamic malloc


    【解决方案1】:

    这是 C。您不能只调用 printf() 并期望它为您完成工作。您需要使用 for() 或 while() 循环遍历数组并打印出每个元素。

    假设它是一个字符串数组:

    int i;
    for (i=0; i<size; i++)
        printf("array[%d] = %s\n", i, array[i]);
    

    【讨论】:

    • 我试过 for(int i=0;i
    • @MarlonBrando:那是无效的 C。您必须在函数顶部声明 int i;,然后使用 for(i=0;...)
    • 好的,谢谢。但现在它只打印出第一个元素,即空格前的第一个字符
    • %d 用于打印有符号整数。对字符串使用%s
    • @Dennis %d 只打印出索引号。 %s 就在那儿,如果你读得更远一点
    【解决方案2】:

    请检查此代码。我相信它会达到您的预期。

    #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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 2021-01-31
      • 2014-01-10
      • 1970-01-01
      • 2011-03-23
      相关资源
      最近更新 更多