从文件加载并保存到数组

时间:2014-04-20 09:54:36

标签: c arrays file

我有问题。我有这个代码,第一部分同时工作我的意思是好,因为通过调试代码(我打印什么是保存我的数组,并且看起来不错)。但是在阵列中我想要的是什么。

我的档案我有这种格式的名字:

Peter News
Martin Clear
.
.
.

我的代码只打印到最后一行。我尝试在数组中打印其他行,但在第一行或最后一行只是最后一行。我尝试everthink但它不起作用。

这是一个简单的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *soubor;
    char radek[80];
    char *data[100];
    int pos = 0;
    int i;

    soubor = fopen("names.txt","r");

    while(fscanf(soubor,"%[^\n]", radek) != EOF){
        getc(soubor);
        data[pos] = radek;
        printf("%d radek = %s pole = %s \n", pos, radek, data[pos]); // debug
        pos++;
    }

    for(i=0;i<100;i++){
        printf("%s \n",data[i]);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

不幸的是,如果你不太清楚,C在这方面的使用可能不是很直观。

您将各个行存储在radek缓冲区中,并用每个新行覆盖它。在data中,您只是一次又一次地将同一指针保存到radek,因此最后,您只需打印最后一次内容100次。

您需要使用strdup()来存储它:

data[pos] = strdup(radek);

这将在堆上的radek中分配字符串的副本,并执行您需要的操作。


但是还有更多的问题,比如你应该在使用后用free()释放内存是正确的,使用静态大小的缓冲区对于缓冲区溢出是危险的,没有太多的错误处理等。< / p>

你可能想看看,例如在答案here,它具有文本文件行的动态存储实现。