我正在尝试从文本文件中读取数据&将其存储在具有一个字符指针的结构中。一个int变量。 在从文件中获取数据期间,我知道将有一个字符串来获取&一个整数值。 我也知道我必须开始取位的位置形式。 我不知道的是字符串的大小。 那么,我该如何为该String分配内存。 示例代码在这里:
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);
提前感谢您的帮助。
答案 0 :(得分:0)
你的意思是你的第二个fseek()中的SEEK_CUR?如果是这样,那么你知道字符串的长度。使用固定大小的缓冲区。
答案 1 :(得分:0)
如果你知道第一个结构的位置和第二个结构的位置,你也知道第一个结构的总长度(第二个的位置 - 第一个结构的位置< / em>的)。您还知道结构的整数部分的大小,因此您可以轻松计算字符串的长度。
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);
答案 2 :(得分:0)
无论
\0
,使其行为正确,作为以空字符结尾的字符串(和/或保存长度以备不时之需)或者
\0
等你在评论中说,最多。字符串长度是有界的,所以第一种方法可能没问题。你还没有说过如何弄清楚字符串的结束位置,但是我假设有一些分隔符,或者右边是空格或其他东西。
答案 3 :(得分:0)
我假设您使用fseek以二进制模式打开文件。
您可以使用fgetc()
从文件中读取,因为您不知道大小只是分配一个初始大小为100的缓冲区,然后通过char将char放入缓冲区来读取char。监视缓冲区是否足够大以容纳字符,如果不是realloc()
缓冲区则更大。