使用malloc从函数返回数组

时间:2014-09-06 11:48:06

标签: c arrays pointers memory-management

我试图逐行阅读文字,看了一些例子后,我决定使用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个标记。然后我将每个标记存储到一个单独的数组中(以便每列都是一个数组)。然后我将遍历每个阵列并执行所需的操作。但是,我真的坚持这一步。

1 个答案:

答案 0 :(得分: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;
}