You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在char数组中正确存储并逐词恢复std::vector中的字符串?

修复逐词读取的问题

嘿,你的问题出在遍历指针的偏移计算上!咱们来一步步理清楚:

原代码的错误点

你写的features_ptr += strlen(features) + 1;这里有明显问题:strlen(features)是计算整个features数组的总长度,而不是当前指针指向的单个单词的长度。这就导致每次循环都会直接跳到整个数组的末尾之外,自然没法正确读取下一个单词。

正确的修改方案

把偏移量改成基于当前指针features_ptr的strlen值(也就是当前单词的长度),然后加1跳过你手动插入的空字符。修改后的代码如下:

char * features_ptr = features;
while (*features_ptr) {  // 只要当前指针不是空字符,说明还有单词未读取
    std::string Str = std::string(features_ptr);
    logger.message( "palavra: " + Str);
    // 跳过当前单词的长度 + 手动插入的分隔用空字符
    features_ptr += strlen(features_ptr) + 1;
}

额外小提示

其实你在拼接阶段用std::strcat(features,"\0")是多余的——因为std::strcat本身就会在拼接完字符串后自动添加一个空字符。不过你手动加的这个空字符正好用来分隔单词,所以这个拼接逻辑没问题,只是一定要确保features数组的大小足够容纳所有单词加上所有分隔用的空字符,避免缓冲区溢出导致的未定义行为。

内容的提问来源于stack exchange,提问作者Pedro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:59:05