Jo presna takhle to dopada, kdyz se nedodrzuji zakladni zasady psani :-). Vim to z vlastni zkusenosti, samotneho me tyhle veci parkrat vypekly.
Takhle neeee ;-)
char b[8];
memcpy(b, "BBBBBBBBBBBB", 12);
nebo radeji
char b[8];
memcpy(b, "BBBBBBBBBBBB", sizeof(b));
nebo mozna jeste lepe
#define BUF_SIZE 8
char b[BUF_SIZE + 1];
memcpy(b, "BBBBBBBBBBBB", BUF_SIZE);
Petr
Ja bych rekl, ze to dela presne to, co bysme chteli. Problem je ale samozrejme v tom, ze ten priklad s kopirovanim stringu pevne delky neni moc prakticky a na kopirovani retezcu bych asi tezko pouzil memcpy. Reseni jsou podle me tri:
1. Pouzit neco jako strncpy
2. Pouzivat strdup nebo neco podobneho
3. Vykaslat se na char * uplne a bud pouzit nejakou tridu v C++ nebo mam pocit, ze glibc obsahuje taky nejakou podporu pro "vyssi" retezce. Kdysi tady o takovych vecech vychazel serial.
Ma nekdo jeste jine reseni?
no s tim memcpy bych si takle nehral bejt tebou,
mas to jako retezec, toznamena ze ti musi koncit nulou
a tu tam nedavas
tedy by melo byt b[7] = '\0';
resp b [BUF_SIZE] = '\0';
jasne ze na retezce je lepsi pouzivat str fce (strcpy, strncpy),
akorat tusim ze to strncpy tam tu nulu na konec taky nedava
a zas mam pocit ze mem fce sou rychlejsi nez str fce
jenom o ten wrapper - memcpy() a str[n]cpy() jsou
prakticky ekvivalentni funkce, jenom memcpy "se
zastavi," kdyz narazi na '\0' nebo [v pripade
strncpy()] po okopirovani n znaku, a to tak, ze nejprve
ozkouma delku kopirovaneho retezce a potom zavola
memcpy(), takze primym volanim memcpy() cas neusetrite,
neb tu delku musite tak jako tak zjistit.