|
| 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
| |
|
|