1。)是否可以反转包含NULL字符的字符串(这意味着“ abcd”表示为五个字符,包括空字符。)
2。)在我当前的实现中,没有考虑1.),交换期间出现分段错误。即在分配时:* str = * end;
void reverse(char *str)
{
char * end = str;
char tmp;
if (str)
{ // to handle null string
while (*end)
{ // find the end character
++end;
}
--end; // last meaningful element
while (str < end) // terminal condition: str and end meets in the middle
{ tmp = *str; // normal swap subroutine
*str = *end; // str advance one step
*end = tmp; // end back one step
str++;
end-- ;
}
}
return;
}
您的功能正确。似乎问题是您正在尝试反转字符串文字。您不能更改字符串文字。他们是一成不变的。任何尝试更改字符串文字的行为都会导致程序的行为未定义。
这样调用代码:
我很确定你可以。您只需要字符串的长度并知道要测试NUL。
// You can try this :
`void reverse(char *str) {
char *end = str;
char tmp;
if (str) {
while (*end){
++end;
}
--end;
while (str < end) {
tmp = *str;
*str++ = *end;
*end-- = tmp;
}
}
}`