C 将文件中的所有行读取到数组
如何从文本文件中读取多行(约5000行)并将其存储在单个字符串数组中? 我已经有一些代码运行顺利,但它没有工作的方式应该。我只获取存储在数组中的文件的最后一行C 将文件中的所有行读取到数组,c,arrays,text-files,C,Arrays,Text Files,如何从文本文件中读取多行(约5000行)并将其存储在单个字符串数组中? 我已经有一些代码运行顺利,但它没有工作的方式应该。我只获取存储在数组中的文件的最后一行 int main(){ int n; char line[401]; char string[10000]; fr = fopen ("fila1b.txt", "rt"); while(fgets(line, 400, fr) != NULL){ strcat(string, line);
int main(){
int n;
char line[401];
char string[10000];
fr = fopen ("fila1b.txt", "rt");
while(fgets(line, 400, fr) != NULL){
strcat(string, line);
}
fclose(fr);
printf("%s\n", string );
}
编辑:我用一些更改更新了代码。现在我使用strcat函数将fgets得到的行的内容插入到原始字符串数组中。很显然,它正在发挥作用。但是,当我打印“字符串”时,它只打印前300行,然后它会给我分段错误。通常的方法是用
read
或fread
将所有字符发音:
#define MIN_CHUNK_SIZE (1024)
char *read_file(FILE *f) {
size_t n_read_total = 0;
size_t buf_size = MIN_CHUNK_SIZE + 1; // Allow space for nul terminator.
char *buf = safe_malloc(buf_size);
size_t n_avail;
do {
n_avail = buf_size - n_read_total - 1;
if (n_avail < MIN_CHUNK_SIZE) {
// Double the buffer size.
n_avail += buf_size;
buf_size += buf_size;
buf = safe_realloc(buf, buf_size);
}
size_t n_read = fread(buf + n_read_total, 1, n_avail, f);
n_read_total += n_read;
} while (n_read == n_avail);
buf[n_read_total] = '\0';
return safe_realloc(buf, n_read_total + 1);
}
#定义最小块大小(1024)
char*read_文件(文件*f){
大小\u t n\u读取\u总计=0;
size\u t buf\u size=MIN\u CHUNK\u size+1;//为nul终止符留出空间。
char*buf=安全的malloc(buf\u大小);
大小不可用;
做{
n_avail=buf_size-n_read_total-1;
if(n\u avail<最小块大小){
//将缓冲区大小增加一倍。
n_avail+=buf_尺寸;
buf_尺寸+=buf_尺寸;
buf=安全实位(buf,buf尺寸);
}
大小n读取=fread(buf+n读取总计,1,n可用,f);
n_read_total+=n_read;
}while(n_read==n_avail);
buf[n_read_total]='\0';
返回保险箱realloc(buf,n读取总量+1);
}
每次调用gets
都可能会覆盖行的内容。
循环时,需要在的正文中加入一些内容。。。可能是将行内容放入数组的代码?行没有数组,所有代码都丢失了。这不是一个“写我的代码”的网站。你得到了什么,你的具体问题是什么?你正在把每一行读入一个数组,每次都是同一个数组。当数组以零结尾时,有时称为字符串,但C没有字符串类型。您要么需要一个二维数组(可能会破坏局部变量,并且当输入具有不同长度时会浪费内存),要么需要一个指针数组,您可以使用strdup
分配它。