![](/img/trans.png)
[英]How to dynamically allocate memory space for a string and get that string from user?
[英]How to allocate memory for a String Dynamically?
我试图从文本文件中读取数据并将其存储在具有一个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);
在此先感谢您的帮助。
您是在第二个fseek()中表示SEEK_CUR吗? 如果是这样,则您知道字符串的长度。 使用了固定大小的缓冲区。
如果您知道第一个结构的位置和第二个结构的位置,那么您还知道第一个结构的总长度( 第二个 位置-第一个位置 )。 您还知道结构整数部分的大小,因此可以轻松计算字符串的长度。
off_t pos1; /* Position of first structure */
off_t pos2; /* Position of second structure */
size_t struct_len = pos2 - pos1;
size_t string_len = struct_len - sizeof(int);
要么
\\0
,这样它就可以作为以nul终止的字符串正常工作(和/或也可以保存长度,以防您需要) 要么
\\0
等 您在评论中说,最高 字符串长度是有界的,因此第一种方法可能很好。 您没有说出如何确定字符串的结尾,但是我假设有一些定界符,或者它用空格右填充。
我假设您使用fseek以二进制模式打开文件。
您可以使用fgetc()
从文件中读取数据,因为您不知道该大小只是分配一些初始大小(例如100)的缓冲区,然后通过char读取char并将它们放入缓冲区中。 监视缓冲区是否足够大以容纳字符,如果不是,则监视缓冲区的realloc()
是否更大。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.