ポインターを介して文字列を反転する関数を作成しました。コードは問題なく動作しており、バグはありませんが、知りたいことがいくつかあります。
これが私のコードです:
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);