【问题标题】:Return array from a function using malloc [closed]使用 malloc 从函数返回数组 [关闭]
【发布时间】:2014-09-06 11:48:05
【问题描述】:

我正在尝试逐行阅读文本,在查看了一些示例后,我决定使用malloc 方法,但是我一直收到错误

error: subscript of pointer to function type
       'void *(unsigned long)'"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *readFile(char filename[])
{
    char line[100];
    char *list = malloc(100); //causes error...
    int i = 0;

    FILE        *file = fopen(filename,  "r");  

    while (fgets (line, sizeof line, file)!= NULL)
    {
        list[i] = line;
        i++;
    }
    return list;
}

int main(int argc, char *argv[])
{
char *p = readFile(argv[1]);    
for (int i = 0; i<10; i++)
   {
        printf("%s", list[i]);
   }
   return 0;
}

基本上我有一个任务来检查一个有 4 列的文本文件,我试图将每一行存储到一个数组中,然后使用 strtok 将每一行分成 4 个标记。然后我会将每个标记存储到一个单独的数组中(这样每一列都是一个数组)。然后我会遍历每个数组并执行所需的操作。但是,我真的卡在这一步了。

【问题讨论】:

  • list[i] = line; 不是你想要的。你的编译器也应该警告你。
  • @Kerrek - Stack Overflow 欢迎狂热的程序员。也许Could we please be a bit nicer to new users? 会在这里适用?
  • @jww:我确实欢迎新的狂热用户。说真的。

标签: c arrays pointers memory-management


【解决方案1】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char **readFile(char filename[]){
    char line[100];
    char **list = malloc(100*sizeof(char*));//for 100 lines
    int i = 0;

    FILE *file = fopen(filename,  "r");  

    while (fgets (line, sizeof line, file)!= NULL && i < 100){
        list[i] = malloc(strlen(line) + 1);
        strcpy(list[i], line);
        ++i;
    }
    fclose(file);
    return list;
}

int main(int argc, char *argv[]){
    char **list = readFile(argv[1]);
    for (int i = 0; i<10; i++){
        printf("%s", list[i]);
    }
    //deallcate list[i], list
    return 0;
}

【讨论】:

  • 我在我的课程中还没有看到** 的任何内容(假设是另一种类型的指针?),我会看看为什么会这样。哦...我也将指针放入列表中,这就是您使用 strcpy 的原因...谢谢...我如何奖励您帮助我?我不能投票给你(需要 15 声望)
  • @caha11 char** 是指向char 的指针。 if char *list[i] then list[n] = line : 并不意味着通过简单地复制line的相同指针来复制内容。
  • 是的,我明白了,非常感谢。我确实花了很长时间没有进展,这很有帮助。我是这个网站的新手,我该如何给你代表?或者我能做些什么来奖励你帮助我
  • @caha11 如果问题已解决,请点击V标记接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 2017-07-30
  • 2012-04-20
  • 1970-01-01
相关资源
最近更新 更多