gpt4 book ai didi

C++ 自定义字符串修剪实现 valgrind 警告

转载 作者:行者123 更新时间:2023-11-28 06:57:30 24 4
gpt4 key购买 nike

最近我实现了一个自定义函数来修剪 std::strings,删除空白字符前缀和后缀。

我测试了功能,它根据我的单元测试工作,但是当使用 valgrind 运行测试时,我得到以下输出:

==4486== Conditional jump or move depends on uninitialised value(s)
==4486== at 0x415DDA: is_ws_char(char) (parse.cpp:22)
==4486== by 0x415BC6: parse::trim(std::string&) (parse.cpp:34)

我输入的测试字符串是

string s("  a");

我看不出这里有什么问题。代码如下所示:

inline bool is_ws_char(const char c) {    // this is line 22 in my code
return (c == ' ' || c == '\n' || c == '\t' || c == '\r');
}


void parse::trim(std::string& str) {
size_t len = str.size();
size_t i = 0;
for (; i < len; ++i)
if (!is_ws_char(str[i]))
break;
const size_t start = i;
for (i = len - 1; i >= 0; --i)
if (!is_ws_char(str[i])) // this is line 34 in my code
break;
const size_t end = i;
str = str.substr(start, end - start + 1);
}

有人知道这里的问题是什么吗?我简单地认为这只是 valgrind 的一个奇怪之处,但这似乎不太可能。

提前致谢!

最佳答案

这个循环无效

for (i = len - 1; i >= 0; --i)

条件将始终等于 true,因为表达式 --i 将始终 >= 0,因为 i 是无符号整数。

此外,当 str.size() 等于零时,len - 1 将等于 std::string::npos。

关于C++ 自定义字符串修剪实现 valgrind 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22969507/

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