【发布时间】:2014-09-02 08:05:38
【问题描述】:
我试图了解为什么在这段代码的执行过程中会出现分段错误 (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) 函数调用返回值的两倍。
【问题讨论】:
-
你认为
str = str + strlen(str) + 1;会做什么? -
好吧,最后的
+ 1越界了,但是不知道这段代码的目的是什么。 -
循环的编写可能需要一组连续的字符串,而不是单个字符串。
-
我认为,如果您向我们展示已注释掉的 其他说明,可能会有所帮助。这可能会证实(或以其他方式)@Harry 和我的预感。
-
@DavidHeffernan:其他说明不变
str。