将文件的每一行分配到数组的每个元素中

时间:2015-03-03 21:12:11

标签: c arrays file

我对C编程很陌生,刚刚开始研究文件。我想知道是否可以逐行读取文件(包括每行中的空格)到一个大小等于文件中行数的数组。我真的不知道从哪里开始,或者这是否可能,所以任何指导都会非常感激。

示例

以下形式的文本文件:

Computer Programming
Software Engineering
Computer Architecture

写入数组,以便:

char array[4];

array[0] = "Computer Programming";
array[1] = "Software Engineering";
array[2] = "Computer Architecture";

到目前为止,我所拥有的只是:

int main()
{
    char array[50];
    bool answer;

    FILE *classes;
    classes = fopen("classnames.txt", "r");

    if(classes == NULL){
        printf("\n ************* ERROR *************\n");
        printf("\n \"classnames.txt\" cannot be opened.\n");
        printf("\n         PROGRAM TERMINATED\n");
        exit(EXIT_FAILURE);
    }

接下来我想将每个类名写入数组的每个元素。

2 个答案:

答案 0 :(得分:1)

是的,您只需要将array声明为char**并在阅读每一行时动态分配。 E.g。

int MAX_NUM_LINES = 1000;
int MAX_LINE_LEN = 256;

char** array;
malloc(array, MAX_NUM_LINES*sizeof(char*));
fp = fopen(...);

int line_ct = 0;
char line[MAX_LINE_LEN];
while ( fgets(line, MAX_LINE_LEN, fp) != NULL )
{
   int len = strlen(line);
   malloc(array[line_ct], len * sizeof(char));
   strcpy(array[line_ct], line);
   line_ct++;
}

我实际上并没有尝试编译这段代码,但是这样的东西会起作用。你也可以先用快速的runthrough替换MAX_NUM_LINES和计算行数 - 这可能是最好的。

答案 1 :(得分:0)

这是一种可能的方法的例子

#include <stdio.h>
#include <string.h>

int main()
{
    char        array[100][100];
    char        line[100];
    size_t      arraySize;
    size_t      count;
    FILE       *file;
    const char *filepath;

    filepath = "<put the file path here>";
    file     = fopen(filepath, "r");
    if (file == NULL)
     {
        perror("fopen()");
        return -1;
     }

    count     = 0;
    arraySize = sizeof(array) / sizeof(array[0]);
    while ((fgets(line, sizeof(line), file) != NULL) && (count < arraySize))
     {
        size_t length;

        length = strlen(line);
        if (line[length] == '\0')
            line[--length] = '\0';
        memcpy(array[count++], line, 1 + length);
     }
    fclose(file);

    return 0;
}