Portál AbcLinuxu, 30. dubna 2025 07:47
/*C*/ strcat(c, a); strcat(c, b);tohle:
/*C*/ strcpy(c, a); strcat(c, b);? Sice to funguje stejně, ale k čemu by pak bylo
strcpy
, kdyby to ani nebylo zapotřebí?
*c == '\0'v opacnom pripade sa a prilepi za prvu '\0' v c, co by mohol byt celkom problem (pretecenie).
strcpy kopiruje vzdy na zadanu adresu ako prvy parameter (to len na doplnenie).
1. V tom je ovšem mezi strcpy()
a strcat()
obrovský rozdíl, že? :-)
2. To, co jste napsal, dělá úplně něco jiného, než jste chtěl.
3. Kdybyste použil strlen()
místo sizeof()
(což jste patrně měl na mysli), bude vaše konstrukce dělat přesně totéž co strcpy(c,a)
strcpy
implementovali nějak takto
while (*a++ = *b++);
while( *b++ != '\0' ) { *a++ = *b++;je to jenom pro ilustraci bude to napsane urcite lepe
}
Ale skončil, je to zcela korektní implementace strcpy()
, na rozdíl od té vaší, která kopíruje jen každý druhý znak a i když se náhodou trefí do koncové značky, stejně ji nezkopíruje.
Měl byste si nastudovat aspoň základy, všechno, co jste sem zatím napsal, bylo úplně špatně. Idiom
while (*s++ = *t++);
je už v Kernighanovi a Ritchiem…
Ostatně, dynamické jazyky operátory přetypování nenabízejí. Tedy pokud za ně nepovažujeme konverzní funkce, třeba pro převod z čísla na řetězec.Obecně mi není jasné, proč by přetypování nemělo mít u dynamických jazyků smysl (když se podle typu řídí např. výběr metody). Pokud by na přetypování někdo trval, tak change-class v CL existuje, ale je fakt, že to může být chápáno jako na pomezí konverze a přetypování.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.