[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] strings WAS Hvad går der galt?



On Mon, 10 Nov 2003 21:29:49 +0100
"Erwin S. Andreasen" <sslug@sslug> wrote:

> strncpy blev nemlig oprindelig lavet for at håndtere strukturer som
> skulle gemmes direkte på diske, fx utmp/wtmp. Strenge i disse er
> defineret som at værende NUL-terminerede hvis der er plads, ellers
> ikke. Og omvendt, når man skriver til disse ønsker man ikke at gemme
> diverse snavs der skulle ligge i hukommelsen udover NUL-terminatoren.

Ja, der er en mening med galskaben. Hvad er det man efterlyser i denne
diskussion? Sagen er jo, at det er snyde nemt at lave en ad-hoc string
handling funktion i C, hvis man ikke lige finder det, man mangler. Men
der er trods alt nok til de fleste situationer. Prøv lige man strdup,
strndup, memcpy, memccpy etc.

> strlcpy løser alle disse problemer, men er ikke standard (den dukkede
> vist op i BSD).

 ... og man kan hurtig lave en, der ligner. Det er jo tilladt at
lave sine egne funktioner, og det er på det punkt, C har sin styrke.
Det er nemt at bygge en wide-character handling op med C funktioner,
prøv det i perl. I et sprog som PERL skal man kende det eksisterende
bibliotek, i C skal man skrive dem selv.

> På den anden side er det heller ikke en meget bedre løsning at bare
> lydløst trunkere input fra brugeren til N tegn (en advarsel i en
> obskur log fil eller standard error er ikke meget bedre). Enten bør
> man returnere en fejl så brugeren ikke kan undgå at se at der er noget
> galt, eller allokere hukommelse dynamisk i stedet for at have nogle
> vilkårlige MAX_FOO_SIZE konstanter spredt rundt i koden.

Det er nemlig også en fare. 

> Den slags streng/bufferhåndtering er selvfølgelig lettere hvis man
> ikke bruger et forældet sprog som C.

Skal vi nu have religionskrig igen? Hvilket sprog er ikke skrevet
i C? Selv Emacs og scheme sproget bruger C kode. Hvorfor mon?



-- 
sslug@sslug -- http://d-axel.dk/


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:10 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *