Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

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



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.