Re: lug-bg: gcc str[i]=''; ?!.
- Subject: Re: lug-bg: gcc str[i]=''; ?!.
- From: Peter Pentchev <roam@xxxxxxxxxxx>
- Date: Tue, 15 Jun 2004 16:15:38 +0300
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 roam@xxxxxxxxxxx roam@xxxxxxxx roam@xxxxxxxxxxx
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:
pgpNZ8YInH00f.pgp
Description: PGP signature
|