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.

Attachment: pgpVDfa7rmYgJ.pgp
Description: PGP signature

Reply via email to