c - 如何为字符串动态分配内存?

标签 c

我正在尝试从文本文件中读取数据并将其存储在具有一个 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);

预先感谢您的帮助。

最佳答案

要么

  1. malloc 最大可能长度
  2. 将这些内容读入 malloc block
  3. 找出字符串真正的结尾在哪里
  4. \0 写入您的 malloc block 中,以便它能够正确地作为以 nul 结尾的字符串(和/或保存长度以备不时之需)
  5. 可以选择将 block 重新分配到正确的大小

或者

  1. malloc 长度的合理猜测 N
  2. 读了这么多
  3. 如果在该缓冲区中找不到字符串的结尾:
    1. 使用 realloc 将缓冲区增大到 2N(例如),并将接下来的 N 个字节读入末尾
    2. 转到3
  4. 如上编写\0
<小时/>

您在评论中说最大。字符串长度是有限的,因此第一种方法可能很好。您还没有说如何确定字符串的结尾位置,但我假设有一些分隔符,或者它右侧填充了空格,或者其他东西。

关于c - 如何为字符串动态分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10845822/

相关文章:

c - LD_PRELOAD不会影响RTLD_NOW的dlopen()

c - 请求成员不是结构或 union 错误

c - 从 ‘void*’ 到 ‘char*’ 的转换无效错误

C语言: float % float why expression must have integral type

c++ - Arduino云桥: simple command failing

c - 添加结构体以动态改变内存空间量

c 读取非 ASCII 字符

c - 使用 FFmpeg libavformat 录制 RTSP 流

c - Ruby C 扩展无法在运行时解析第 3 方 dll

c - Emacs C 模式中的自动注释结尾大括号