0

ポインターを介して文字列を反転する関数を作成しました。コードは問題なく動作しており、バグはありませんが、知りたいことがいくつかあります。

これが私のコードです:

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;
}

ここで、最後の 3 行目で、*q には値が必要です。'\0'これは、前に正確な文字列をコピーしたためです。したがって、'\0'コピーされている必要があります。

ただし、交換するときは

*(s2++) = *(p++);

p++;

つまり、文字列の末尾まで増加pするだけで、文字列をs2条件にコピーしません。

while(*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);
4

1 に答える 1