|
| 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 (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);
| |
|
|