On Tue, Jun 15, 2004 at 03:59:04PM +0300, Doncho Angelov wrote: [snip] > Не знам как си представяш, че записвайки '' в паметта С-то ще се усети и > ще ти замаже този елемент в масива. С не е "високо-ентелигентен"- той > прави само това, което си му написал. > Преди може да е работело заради имплементацията, заради това как > операционната система печата символът, който С-то ти е слагало, когато > срещне '' (като нищо това е било символът '\777', което е 0xFF, което се > печата като празно. > За да изриеш символът "наистина" ползвай strcpy: > char *sym; > sym = <някакъв не константен стринг>; > > // ако искаш за дамажеш първият символ: > strcpy(sym, sym+1, strlen(sym)-1));
Ъм.. упс :) strcpy() приема само два параметъра и копира до \0 :) Може би си имал предвид или strncpy(sym, sym+1, strlen(sym) - 1), или memcpy(sym, sym + 1, strlen(sym) - 1) ... макар че и в двата случая май ти трябва strlen(sym) цялата, не без 1, за да хванеш и нулевия символ накрая :) И да, знам, че нямаш нужда от тази лекция заради неволна грешка; тя е по-скоро за dgt_it :) > // ако искаш за дамажеш Н-ят първият символ: > // НЕ Е дуракоустойчиво: > int n = 5; > assert(n < strlen(str) && n<(strlen(str)-1)); > strcpy(sym+n, sym+n+1, strlen(sym)-n-1)); И тук може би друга функцийка, и всъщност strlen(sym)-n, за да изкопираш и последната нуличка. А ако ползваме свястна операционна система и/или libc, ще имаме strlcpy(), което ще се справи още по-добре :) Е.. малко не е много portable все още.. но и това се променя полека-лека. Поздрави, Петър -- Peter Pentchev [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] PGP key: http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553 "yields falsehood, when appended to its quotation." yields falsehood, when appended to its quotation.
pgpVDfa7rmYgJ.pgp
Description: PGP signature
