我写了一个通过指针反转字符串的函数,代码运行良好,没有错误,但有些事情我想知道。
这是我的代码:
char * xstrrev(char *s1, char *s2){
 register char *p = s1;
 register char *q = s2;
 char *r  = s2;
  do{
     *(s2++) = *(p++); //first copy the string, afterwards, replace it
  }while(*p);
  p--; //to eliminate trailing '\0' while reversing.
  do {
    *(q++) = *(p--); //replace contents by reverse contents,
  }while(*q);
  return r;
}
在这里,在倒数第三行, *q 必须有一个 value '\0',因为,我们之前复制了确切的字符串,所以,'\0'必须已经复制了。
但是,当我更换我的
*(s2++) = *(p++);
和
p++;
即,我只增加到p字符串的末尾,并且不将字符串复制到s2,条件
而(*q)
仍然有效。在这种情况下,*q不应该有\0,对吧?那么这个条件是如何工作的呢?
当我更换时,它是一样while(*q)的while(*q!='\0') 
编辑:: 它被称为:
char  a[110]= "hello";
char f[116];
xstrrev(a,f); //reverse a and put to f
puts(f);