gpt4 book ai didi

c++ - 如何检查 LPTSTR 字符串的内容?

转载 作者:行者123 更新时间:2023-11-30 19:58:33 25 4
gpt4 key购买 nike

我试图理解为什么在执行这段代码期间会发生段错误(SIGSEGV)。该错误在测试 while 指令中指定的条件时发生,但不是在第一次迭代时发生,而是在第二次迭代时发生。

LPTSTR arrayStr[STR_COUNT];
LPTSTR inputStr;
LPTSTR str;

// calls a function from external library
// in order to set the inputStr string
set_input_str(param1, (char*)&inputStr, param3);

str = inputStr;
while( *str != '\0' )
{
if( debug )
printf("String[%d]: %s\n", i, (char*)str);

arrayStr[i] = str;
str = str + strlen((char*)str) + 1;

i++;
}

阅读后this answer ,我在网上做了一些研究,发现this article ,所以我尝试使用本文中读取的这段代码来修改上面的代码(见下文)。然而,这一改变并没有解决问题。

for (LPTSTR pszz = pszzStart; *pszz; pszz += lstrlen(pszz) + 1) {
... do something with pszz ...
}

this answer 中假设的那样,代码似乎需要双空终止的字符串数组。因此,我想知道如何检查 inputStr 字符串的内容,以检查它是否实际上只包含一个空终止符字符。

注意:printf 指令打印的字符串中的字符数是 lstrlen(str) 函数调用返回值的两倍在第一次迭代时。

最佳答案

好的,现在您已经包含了其余的代码,很明显它确实是为了解析一组连续的字符串。问题是您混合了窄字符串和宽字符串类型。修复它所需要做的就是更改变量定义(并删除强制转换):

char *arrayStr[STR_COUNT];
char *inputStr;
char *str;

// calls a function from external library
// in order to set the inputStr string
set_input_str(param1, &inputStr, param3);

str = inputStr;
while( *str != '\0' )
{
if( debug )
printf("String[%d]: %s\n", i, str);

arrayStr[i] = str;
str = str + strlen(str) + 1;

i++;
}

具体来说,问题发生在这一行:

while( *str != '\0' )

由于您没有将 str 转换为 char *,因此比较是寻找宽 nul 而不是窄 nul。

关于c++ - 如何检查 LPTSTR 字符串的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25618655/

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