Bu bir dize kopyasıdır, ancak özgün işaretçi değerini kaybediyorsunuz. Orijinal işaretçi değerini kaydetmelisiniz.
for (;;) {
char *q2 = p2; // original p2 in q2
char *q1 = p1; // original p1 in q1
char c = *q1; // original *p1 in c
p2 += 1; // complete post increment of p2
p1 += 1; // complete post increment of p1
*q2 = c; // copy character *q1 into *q2
if (c) continue; // continue if c is not 0
break; // otherwise loop ends
}
q1
ve
q2
kaydedilir olduğunu
düzen ve p2
ve p1
değiştirmiş olabildikleri artırılır sırayla:
int main()
{
char *p1 = "Hello";
char *p2 = malloc(20);
char *p3 = p2;
memset (p2, 0, 20);
while (*p2++ = *p1++);
printf ("%s\n", p3);
}
while döngüsünde gerçek anlamsal açıklama gibi bir şey olurdu. 'un c
'a kaydedilmesi, q1
kaydedildikten sonra herhangi bir zamanda oluşabilir. c
'un *q2
'a atanması, c
kaydedildikten sonra herhangi bir zamanda oluşabilir. Zarfın arkasında, bu en az 40 farklı yorum için çalışıyor.
[while (* s ++ = * t ++) ”nasıl çalışır? (Http://stackoverflow.com/q/810129/4279) – jfs