/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
automatisk malloc til char*
Fra : Martin Hansen


Dato : 29-04-02 16:47

Jeg er ved at skrive et cgi program i c

Jeg er ikke så erfaren i char* strenge, jeg har tidligere brugt string i
c++. Men det kan jeg ikke her.

Jeg troede egentlig at sprintf automatisk allokerede plads i ud-stengen. men
følgende giver segfault:

char* streng;
sprintf(streng,"hej verden");

Er der en måde hvorpå jeg kan kontruere strengen og allokere plads til den
samtidtigt?
Lige nu gætter jeg lidt på størelsen af den resulterende streng. og
allokerer plads først. Men det virker ikke optimalt.



--
--
Martin Hansen



 
 
Kent Friis (29-04-2002)
Kommentar
Fra : Kent Friis


Dato : 29-04-02 16:59

Den Mon, 29 Apr 2002 17:47:06 +0200 skrev Martin Hansen:
>Jeg er ved at skrive et cgi program i c
>
>Jeg er ikke så erfaren i char* strenge, jeg har tidligere brugt string i
>c++. Men det kan jeg ikke her.
>
>Jeg troede egentlig at sprintf automatisk allokerede plads i ud-stengen. men
>følgende giver segfault:
>
>char* streng;
>sprintf(streng,"hej verden");
>
>Er der en måde hvorpå jeg kan kontruere strengen og allokere plads til den
>samtidtigt?
> Lige nu gætter jeg lidt på størelsen af den resulterende streng. og
>allokerer plads først. Men det virker ikke optimalt.

Du kunne bruge snprintf(), som sikrer at du ikke skriver "ud over
enden".

Mvh
Kent
--
"Handlingen blev afbrudt pga. computerens begrænsede effekt"
- Windows NT på en Pentium III 550 MHz

Byrial Jensen (29-04-2002)
Kommentar
Fra : Byrial Jensen


Dato : 29-04-02 17:20

Martin Hansen <dkdd0mar@danfoss.comm> skrev:
> Jeg er ved at skrive et cgi program i c
>
> Jeg troede egentlig at sprintf automatisk allokerede plads i ud-stengen.

Det gør den ikke.

> Er der en måde hvorpå jeg kan kontruere strengen og allokere plads til den
> samtidtigt?

Det er der ikke hvis du ønsker et portabelt program, men nogle
libc-implementationer tilbyder løsninger - i hvert fald GNU libc
som har asprintf():

- Function: int asprintf (char **PTR, const char *TEMPLATE, ...)
This function is similar to `sprintf', except that it dynamically
allocates a string (as with `malloc'; *note Unconstrained
Allocation::) to hold the output, instead of putting the output in
a buffer you allocate in advance. The PTR argument should be the
address of a `char *' object, and `asprintf' stores a pointer to
the newly allocated string at that location.

The return value is the number of characters allocated for the
buffer, or less than zero if an error occurred. Usually this means
that the buffer could not be allocated.

Martin Hansen (30-04-2002)
Kommentar
Fra : Martin Hansen


Dato : 30-04-02 10:05

"Byrial Jensen" <bjensen@nospam.dk> wrote in message
> libc-implementationer tilbyder løsninger - i hvert fald GNU libc
> som har asprintf():

Lige det jeg skulle bruge, så håber jeg bare gcc-cris har den.


--
Martin Hansen




Claus Rasmussen (29-04-2002)
Kommentar
Fra : Claus Rasmussen


Dato : 29-04-02 18:16

Martin Hansen wrote:

> Jeg troede egentlig at sprintf automatisk allokerede plads i ud-stengen.

Det gør den ikke.


> Er der en måde hvorpå jeg kan kontruere strengen og allokere plads til den
> samtidtigt?

char* s = strdup("Hej med dig");

-Claus


Bertel Lund Hansen (29-04-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 29-04-02 19:04

Claus Rasmussen skrev:

>char* s = strdup("Hej med dig");

Den der strdup() står ikke i min håndbog over standard-C.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Claus Rasmussen (29-04-2002)
Kommentar
Fra : Claus Rasmussen


Dato : 29-04-02 19:27

Bertel Lund Hansen wrote:

> Den der strdup() står ikke i min håndbog over standard-C.

Det har du mindsanten ret i. Jeg har lige tjekket K&R og C99. Den
findes ikke i nogen af dem.

Jeg har vist levet for længe i linux/unix verdenen (og det bliver
jeg ved med

-Claus



Igor V. Rafienko (29-04-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 29-04-02 20:33

[ Claus Rasmussen ]

[ snip ]

> Jeg har vist levet for længe i linux/unix verdenen (og det bliver
> jeg ved med


Men den er jo ikke POSIX heller.





ivr
--
If the Americans want the gold medals this bad, then our Mint should
stamp some and hand them over.
      -- G. Raikov, 2002-02-22 on Salt Lake City Olympics

Claus Rasmussen (29-04-2002)
Kommentar
Fra : Claus Rasmussen


Dato : 29-04-02 21:19

Igor V. Rafienko wrote:

> [ Claus Rasmussen ]
>
>> Jeg har vist levet for længe i linux/unix verdenen (og det bliver
>> jeg ved med
>
> Men den er jo ikke POSIX heller.

Jeg skrev /linux/ ikke POSIX POSIX er EMM utilstrækkeligt til daglig
brug.

Jeg kiggede lige i manualen:

CONFORMING TO
SVID 3, BSD 4.3

Hvad er der mere, der er værd at bekymre sig om ?

-Claus




Martin Hansen (30-04-2002)
Kommentar
Fra : Martin Hansen


Dato : 30-04-02 10:01


"Claus Rasmussen" <clr@cc-consult.dk> wrote in message
> char* s = strdup("Hej med dig");
Jo man den kan ikke
char* s = strdup("hej med jer %i",4);




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste