/ 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
Hjælp til cast -tal og tekst
Fra : Anders Lund


Dato : 18-06-03 01:56

Jeg har følgende kode:
strcpy(buffer, "Content-Length: ");
strcpy( buffer, (const char*)( 7 + strlen(senddata) ) );
strcpy(buffer, "\n");

Det jeg gerne vil er, at sammensætte buffer så den består af
"Content-Length: ", summen af 7 og længden af senddate og tilsidst et
linieskift.

Compilere og kører jeg overstående kode, går programmet ned.
Hvad gør jeg galt?
Håber i vil bære over med mig, jeg har en del huller i min c++ viden.

Mvh
Anders



 
 
Anders Lund (18-06-2003)
Kommentar
Fra : Anders Lund


Dato : 18-06-03 02:01

"Anders Lund" <anders@zaim.dk> skrev i en meddelelse
news:bcod9e$rvp$1@sunsite.dk...
> Jeg har følgende kode:
> strcpy(buffer, "Content-Length: ");

Hmm, har jeg ret når jeg siger at strcpy overskriver det der i forvejen er i
variablen?
Hvad skal jeg bruge istedet?

Mvh
Anders Lund



Rasmus Christian Kaa~ (18-06-2003)
Kommentar
Fra : Rasmus Christian Kaa~


Dato : 18-06-03 05:00


"Anders Lund" <anders@zaim.dk> skrev i en meddelelse
news:bcod9e$rvp$1@sunsite.dk...
> Jeg har følgende kode:
> strcpy(buffer, "Content-Length: ");
> strcpy( buffer, (const char*)( 7 + strlen(senddata) ) );
> strcpy(buffer, "\n");
>
> Det jeg gerne vil er, at sammensætte buffer så den består af
> "Content-Length: ", summen af 7 og længden af senddate og tilsidst et
> linieskift.
>
> Compilere og kører jeg overstående kode, går programmet ned.
> Hvad gør jeg galt?

Programmet går formentlig ned fordi du laver en dynamisk pointer til et
forkert sted i hukommelsen (7+strlen(senddata)).

> Håber i vil bære over med mig, jeg har en del huller i min c++ viden.

Øh, strcpy kopierer teksten fra parameter 2 til parameter 1 og 0-terminerer
strengen. Prøv følgende:

sprintf(buffer, "Content length: %i\n", 7 + strlen(senddata));




Robert Larsen (18-06-2003)
Kommentar
Fra : Robert Larsen


Dato : 18-06-03 06:39

Rasmus Christian Kaae wrote:

> Øh, strcpy kopierer teksten fra parameter 2 til parameter 1 og 0-terminerer
> strengen. Prøv følgende:
>
> sprintf(buffer, "Content length: %i\n", 7 + strlen(senddata));
>
>
>


....og hvis det stadig er HTTP du leger med så skal du bruge CRLF til at
afslutte linjen, ikke kun linefeed. Og det gælder alle linjer i headeren:

sprintf(buffer, "Content-Length: %i\r\n", 7 + strlen(senddata));


Robert


Anders Lund (18-06-2003)
Kommentar
Fra : Anders Lund


Dato : 18-06-03 12:44

"Robert Larsen" <Xrobert@the-playground.dk> skrev i en meddelelse
news:3EEFFADE.1020208@the-playground.dk...
> Rasmus Christian Kaae wrote:
> sprintf(buffer, "Content-Length: %i\r\n", 7 + strlen(senddata));

Tak for jeres hjælp!
Mvh
Anders Lund



Igor V. Rafienko (18-06-2003)
Kommentar
Fra : Igor V. Rafienko


Dato : 18-06-03 12:55

[ Robert Larsen ]

[ ... ]

> ...og hvis det stadig er HTTP du leger med så skal du bruge CRLF til
> at afslutte linjen, ikke kun linefeed. Og det gælder alle linjer i
> headeren:
>
> sprintf(buffer, "Content-Length: %i\r\n", 7 + strlen(senddata));


.... og så bør man heller bruke snprintf for å gardere seg mot tåpelige
overflow feil.





ivr
--
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?

Anders (19-06-2003)
Kommentar
Fra : Anders


Dato : 19-06-03 22:31

> ... og så bør man heller bruke snprintf for å gardere seg mot tåpelige
> overflow feil.
>
Eller måske ligefrem en std::stringstream.

//Anders



Mogens Hansen (18-06-2003)
Kommentar
Fra : Mogens Hansen


Dato : 18-06-03 06:21


"Anders Lund" <anders@zaim.dk> wrote

[8<8<8<]
> Compilere og kører jeg overstående kode, går programmet ned.

Det er givetvis fordi programmet prøver at læse på adresse " 7 +
strlen(senddata)", hvilket formodentligt er ulovlgt.

> Hvad gør jeg galt?
> Håber i vil bære over med mig, jeg har en del huller i min c++ viden.

Kig på C++ stream-klasserne og klasserne std::string og std::vector, før du
bruger "strcpy" og "sprintf" og lignende. Det kan spare dig for en del
bekymringer med buffer-størrelser og typer.

F.eks.
ostringstream os;
os << "Content-Length: " << 7 + strlen(senddata) << "\n";
const char* buffer = os.str().c_str();


Venlig hilsen

Mogens Hansen



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

Månedens bedste
Årets bedste
Sidste års bedste