【发布时间】:2015-10-11 09:26:57
【问题描述】:
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;
}
【问题讨论】:
-
没有
NULL字符。NULL是 空指针 常量。您可能指的是 ASCII-NUL终止符'\0'。 -
@arshdeep kaur 您似乎正在尝试反转字符串文字。您不能反转字符串文字。而是用原始字符串声明一个字符数组。
-
如果你反向包含
NUL终止符,你将有效地得到一个空字符串。这有什么价值? -
@MartinJames: 取决于
char是签名还是未签名,并且您使用 2s 补码:-P -
供将来参考:使用“我在交换过程中遇到分段错误”,同时发布出现错误的调用代码和输入。
标签: c string segmentation-fault reverse