gpt4 book ai didi

c++ - 如何使用 inplace const char* 作为 std::string 内容

转载 作者:太空狗 更新时间:2023-10-29 23:14:13 26 4
gpt4 key购买 nike

我正在从事一个嵌入式软件项目。很多字符串都存储在闪存中。我会使用这些字符串(通常是 const char*const wchar*)作为 std::string 的数据。这意味着我想避免因为内存限制而创建原始数据的拷贝。

扩展的用途可能是通过 stringstream 直接从闪存中读取闪存数据。

不幸的是,示例无法正常工作:

const char* flash_adr = 0x00300000;
size_t length = 3000;
std::string str(flash_adr, length);

任何想法将不胜感激!

最佳答案

如果您愿意使用编译器和库特定的实现,这里有一个适用于 MSVC 2013 的示例。

#include <iostream>
#include <string>

int main() {
std::string str("A std::string with a larger length than yours");
char *flash_adr = "Your source from the flash";
char *reset_adr = str._Bx._Ptr; // Keep the old address around

// Change the inner buffer
(char*)str._Bx._Ptr = flash_adr;

std::cout << str << std::endl;

// Reset the pointer or the program will crash
(char*)str._Bx._Ptr = reset_adr;

return 0;
}

它将打印来自闪存的源代码

想法是保留一个 std::string 能够在你的 flash 中匹配字符串,并不断改变它的内部缓冲区指针。

您需要为您的编译器自定义它,并且一如既往,您需要非常非常小心。

关于c++ - 如何使用 inplace const char* 作为 std::string 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34707004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com