我有一个代码,它集成了某个我无法修改和从文件中读取的库。我需要把它变成从字符串而不是从文件中读取。
string str = "I now have the string from file.txt in memory";
// original code:
FILE *file = fopen("file.txt", "rb");
// ...
uint8_t buffer[128];
// ...
var->var1 = buffer;
// ...
var->var2 = fread(buffer, 1, 128, file);
// ...
这是一个简单的问题,从字符串到缓冲区读取内容的替代方法是什么?
平台:Windows
答案 0 :(得分:1)
是一个能够完全符合您需求的功能:fmemopen
。你把它指向一个内存中的字符串缓冲区,一个brew install php
或composer global require laravel/valet
标志(就像valet install
),它给你一个常规的旧"r"
您可以阅读或写入 - 或者,在您的情况下,传递给需要"w"
读取或写入的函数。
它可以在glibc中使用,因此几乎可以在所有版本的Linux中使用。我认为它可以在某些版本的Unix中使用。我似乎没有在我的Mac上。我担心你可能很难在Windows上找到它。
答案 1 :(得分:1)
如果您不需要FILE *
,如果您只需要将计数字符从一个缓冲区(或字符串)复制到另一个缓冲区(或字符串),那就是memcpy
的用途。例如,对于第一个近似值,您可以替换
fread(buffer, 1, 128, file);
与
memcpy(buffer, str, 128);
现在,如果str
不包含128个字符,这将会非常糟糕。 (如果您的file
字符少于128个,fread
会少于128个字符。)因此更安全的替换将是
int n = 128;
if(strlen(str) < n) n = strlen(str);
memcpy(buffer, str, n);
答案 2 :(得分:0)
如果我正确理解您的任务,您需要从字符串中获取信息,就好像它们是从文件中写入一样。解决这个问题的一种非常舒服的方法是std::stringstream,如果您使用的是C ++。