如何从文本文件中读取多行(可变宽度)并将所有行存储在C“字符串”中?
编辑:我想我会把字符串存储起来并将它们存储在一个灵活的缓冲区中(通过realloc):)此外,这不是功课,即使它看起来似乎如此(编程只是我的一个爱好) 。我只是出于好奇而答案 0 :(得分:2)
由于这显然不是家庭作业,这里有一些示例代码,说明我是如何做的。我只是为整个文件分配了一个巨大的内存块,因为你最终还是要阅读整个文件,但是如果你处理大文件,通常最好一次处理一行。 / p>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// first, get the name of the file as an argument
if (argc != 2) {
printf("SYNTAX: %s <input file>\n", argv[0]);
return -1;
}
// open the file
FILE* fp = fopen(argv[1], "r");
if (fp == NULL) {
printf("ERROR: couldn't open file\n");
return -2;
}
// seek to the end to get the length
// you may want to do some error-checking here
fseek(fp, 0, SEEK_END);
long length = ftell(fp);
// we need to seek back to the start so we can read from it
fseek(fp, 0, SEEK_SET);
// allocate a block of memory for this thing
// the +1 is for the nul-terminator
char* buffer = malloc((length + 1) * sizeof(char));
if (buffer == NULL) {
printf("ERROR: not enough memory to read file\n");
return -3;
}
// now for the meat. read in the file chunk by chunk till we're done
long offset = 0;
while (!feof(fp) && offset < length) {
printf("reading from offset %d...\n", offset);
offset += fread(buffer + offset, sizeof(char), length-offset, fp);
}
// buffer now contains your file
// but if we're going to print it, we should nul-terminate it
buffer[offset] = '\0';
printf("%s", buffer);
// always close your file pointer
fclose(fp);
return 0;
}
哇,自从我编写C代码以来已经有一段时间了。希望人们会对大量问题提供有用的更正/通知。 :)
答案 1 :(得分:1)
这是一般过程
答案 2 :(得分:0)
这是家庭作业吗?
这里棘手的是你必须跟踪字符串的长度以及使用/清空的长度。
要么猜得足够高就可以开始,或者在你没有太空的时候打电话给malloc()
或其中一个兄弟。
答案 3 :(得分:0)
您可以在此处尝试“可变长度”字符串实现:
How to implement a variable-length ‘string’-y in C
然后,您必须对字符串编写“添加”操作。然后,您可以安全地读取任何字节块,并将其连接到您已阅读的内容。