如何在C中将数组插入数组

时间:2014-11-26 07:52:35

标签: c arrays text-files

为了将数组插入另一个数组,可以做些什么。我碰巧有一个我正在循环的文件,所以我的目标是将文件中的每一行放入一个数组(一个行数组)。每行都有一些与学生及其测试结果相关的数据,例如:

  

Mark Zuckerberg 10.0 5.5 9.7

     

比尔盖茨10.0 1.5 6.7

示例代码:

FILE* file;
char buffer[256];
char arrayOfLines[500];
char line[256];   

file= fopen("I:\\students.txt","r+");

/* Helps to iterate through each line */
while (fgets(buffer, sizeof(buffer), file)) {
      //some logic to-be-coded
      line = buffer; // just an idea does not work
      arrayOfLines[i] = line; // just an idea does not work
}

预期结果:

  

arrayOfLines [] = {"马克扎克伯格10.0 5.5 9.7","比尔盖茨10.0   1.5 6.7" };

我当然知道这在某种程度上很容易实现,但是在使用java很长一段时间之后结果有点棘手,有人可以帮我解决这个问题吗? 在迭代和阅读方面,一切都运行得很好。但是,当谈到"播放"每条线都令人毛骨悚然。也许我需要改变我的方法,欢迎任何帮助。

2 个答案:

答案 0 :(得分:2)

当您尝试分配它们时,数组名称会衰减为指针。要将buffer的内容复制到另一个char[]变量,您必须使用memcpystrcpystrncpy

除此之外,你arrayOfLines变量存在问题。它不是一系列线条。这是一个500个字符的数组,所以它甚至不足以容纳2行,你需要的是:

char array_of_lines[500][256];

要复制数据,我会使用:

memcpy(aray_of_lines[i], buffer, sizeof buffer);//where `i` is the current line, starting at 0

这里可能值得研究malloc - 这里的行数组,因为这段代码需要128,000字节的堆栈空间才可用,只是为了容纳array_of_lines数组,所以我想写:

char *array_of_lines[500];
//in the loop:
array_of_lines[i] = malloc(strlen(buffer) + 1);
//check for NULL, and all that
strncpy(array_of_lines[i], buffer, strlen(buffer));

答案 1 :(得分:1)

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

int main( void ){
    FILE *file = fopen("I:\\students.txt","r");
    char buffer[256*500];
    char *arrayOfLines[500];
    char *line = buffer;
    size_t buf_siz = sizeof(buffer);
    int i=0, n;

    while (fgets(line, buf_siz, file)) {
        char *p = strchr(line, '\n');
        if(p)
            *p = '\0';//remove newline
        else
            p = strchr(line, '\0');
        arrayOfLines[i++] = line;
        buf_siz -= p - line + 1;
        if(p + 1 == buffer + sizeof(buffer))
            break;//buffer full!
        line = p + 1;
    }
    fclose(file);
    n = i;
    for(i=0; i<n; ++i)
        puts(arrayOfLines[i]);
    return 0;
}