char removeSpaces(char* str)
{
if (str == NULL)
return '\0';
int i = 0, j = 0;
while (str[i] != '\0')
{
while (str[i] == ' ')
i++;
str[j++] = str[i++];
}
str[j] = '\0';
return str[0];
}
我在编译器中执行代码没有任何问题。当我试图在visual studio中运行它时,我遇到了一个问题。
测试用例以绿色勾号传递,但在此之后正在中止,显示的消息为:
The active Test Run was aborted because the execution process exited unexpectedly. To investigate further, enable local crash dumps either at the machine level or for process vstest.executionengine.x86.exe.
我调试了测试用例并显示:
vstest.executionengine.x86.exe中0x627B1B69(spec.dll)的未处理异常:堆栈cookie检测代码检测到基于堆栈的缓冲区溢出。
如果存在此异常的处理程序,则可以安全地继续该程序。
任何人都可以解释一下。
答案 0 :(得分:0)
在跳过空格时,内部循环可以点击'\0'
,在i++
之后(在分配中),外部循环将不再看到它,并将继续扫描在 '\0'
之后。如果字符串包含尾随空格,则会发生这种情况。
通过使用for()循环将循环逻辑集中在一行上,可以避免这种簿记错误:
void squeezespace(char*string)
{
size_t i,j;
for(i=j=0; string[i]; i++) { // loop logic on one line
if( string[i] == ' ') continue;
string[j++] = string[i] ;
}
string[j] = 0;
}