如何在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
相关产品推荐
相关产品推荐

