在C指针中反转一个字符串?

时间:2013-11-08 06:37:58

标签: c pointers reverse

有人可以帮我理解第2行:char * end = str和第4行:if (str)吗?

void reverse(char *str) { 
   char * end = str; 
   char tmp;
   if (str) {
      while (*end) { 
         ++end;
      }
      --end;
      while (str < end) {
         tmp = *str; 
         *str++ = *end; 
         *end-- = tmp;
      } 
   }
} 

1 个答案:

答案 0 :(得分:4)

if (str)测试可以防止您取消引用空指针并崩溃。

定义char *end = str;定义变量end,一个字符指针,并使用str中存储的值对其进行初始化(这是{的第一个字符的地址{ {1}}指向)。

其余代码确定字符串的长度,然后安排从两端交换字符对,朝着字符串的中间工作。从技术上讲,如果传递一个空字符串(一个指向字符串末尾的空字节的指针),原始代码就不安全。那是因为它会在str指向的字节之前将end递减到一个字节。但是,无法保证字符串开头前一个字节的地址有效。该字符串可能指向内存页面的第一个字节,而前一页面从未被映射过,导致崩溃或其他问题。

最好使用str来确定字符串的长度。

strlen()