我正在尝试从文本文件中读取数据并将其存储在具有一个 char 指针和一个 int 变量的结构中。 在从文件中获取数据期间,我知道将要获取一个字符串和一个整数值。 我也知道我必须开始获取的位置表。 我不知道的是字符串的大小。 那么,我该如何为该字符串分配内存呢? 示例代码在这里:
struct filevalue
{
char *string;
int integer;
} value;
fseek(ptr,18,SEEK_SET);//seeking from start of file to position from where I get String
fscanf(ptr,"%s",value.string);//ptr is file pointer
fseek(ptr,21,SEEK_CUR);//Now seeking from current position
fscanf(ptr,"%d",value.integer);
预先感谢您的帮助。
最佳答案
要么
- malloc 最大可能长度
- 将这些内容读入 malloc block
- 找出字符串真正的结尾在哪里
- 将
\0
写入您的 malloc block 中,以便它能够正确地作为以 nul 结尾的字符串(和/或保存长度以备不时之需) - 可以选择将 block 重新分配到正确的大小
或者
- malloc 长度的合理猜测 N
- 读了这么多
- 如果在该缓冲区中找不到字符串的结尾:
- 使用 realloc 将缓冲区增大到 2N(例如),并将接下来的 N 个字节读入末尾
- 转到3
- 如上编写
\0
等
您在评论中说最大。字符串长度是有限的,因此第一种方法可能很好。您还没有说如何确定字符串的结尾位置,但我假设有一些分隔符,或者它右侧填充了空格,或者其他东西。
关于c - 如何为字符串动态分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10845822/