|
| string til char* Fra : Morten Nørgaard |
Dato : 06-04-01 08:19 |
|
Hej,
et begynderspg., jf. subject: Hvordan går jeg omkring med at omdanne en
string til en char*? Umiddelbar tildeling (=) kan ikke bruges, og
typecasting ej heller; jeg er åben for gode forslag.
Pft,
Morten.
| |
Bertel Lund Hansen (06-04-2001)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 06-04-01 09:26 |
| | |
Rasmus Neckelmann (06-04-2001)
| Kommentar Fra : Rasmus Neckelmann |
Dato : 06-04-01 10:44 |
|
Hvad er problemet lige nøjagtigt?
char *string="Dette er en string";
--
mvh Rasmus Neckelmann
| |
Morten Nørgaard (06-04-2001)
| Kommentar Fra : Morten Nørgaard |
Dato : 06-04-01 10:58 |
|
"Rasmus Neckelmann" <someone@microsoft.com> wrote in message
news:9ak2q0$2nl$1@sunsite.dk...
> Hvad er problemet lige nøjagtigt?
>
> char *string="Dette er en string";
>
> --
> mvh Rasmus Neckelmann
>
>
Jeg vil sende en vector af strings igennem en read-kommando
(socket-programmering), der kun vil ha' med char* at gøre, ikke string.
tænkt eksempel:
virker ikke:
string dummy = "test";
read(filedescriptor, dummy, strlen(dummy));
virker:
char* dummy = "test";
read(filedescriptor, dummy, strlen(dummy));
read-kommandoen nægter at acceptere string-objekter, den vil konsekvent ha'
en char*. Så, derfor har jeg brug for en konvertering.
| |
Igor V. Rafienko (06-04-2001)
| Kommentar Fra : Igor V. Rafienko |
Dato : 06-04-01 12:54 |
|
* Morten Nørgaard
> Jeg vil sende en vector af strings igennem en read-kommando
> (socket-programmering), der kun vil ha' med char* at gøre, ikke
> string.
Det blir nok litt vanskelig å populere en vector< string > fra en
socket uten videre.
> tænkt eksempel:
>
> virker ikke:
>
> string dummy = "test";
> read(filedescriptor, dummy, strlen(dummy));
Det der gir da vitterlig ikke mening: hvorfor fyller du en string med
tegn for så å overskrive den med noe annet?
> virker:
>
> char* dummy = "test";
> read(filedescriptor, dummy, strlen(dummy));
Nei, setningen over virker ikke (jeg fikk segfault, da jeg kjørte
denne) (hint: "test" er en _konstant_ som read vil prøve å
overskrive).
> read-kommandoen nægter at acceptere string-objekter, den vil
> konsekvent ha' en char*. Så, derfor har jeg brug for en
> konvertering.
Jeg innbiller meg at framgangsmåten er litt feil. Uansett, det finnes
dessverre ingen måte å skrive til en string vha. en char*. Ikke uten
videre magi. Siden du trenger å lese data fra en socket, foreslår jeg
at du gjør det vha. char*'s som så legges i en string. Altså, les xx
antall tegn i en char array som så append'es til string'en.
Dersom du skal _skrive_ en vector< string > til en socket, så er det
litt enklere, da det går an å bruke metoden c_str() i std::string.
ivr
--
Death by snoo-snoo
| |
Igor V. Rafienko (06-04-2001)
| Kommentar Fra : Igor V. Rafienko |
Dato : 06-04-01 11:56 |
|
* Rasmus Neckelmann
[snip]
> Hvad er problemet lige nøjagtigt?
>
> char *string="Dette er en string";
At det er en implisitt typecast i tilordningen over som ikke
nødvendigvis fungerer om et par år? (hint: hva er typen til RHS? Og
LHS?)
ivr
--
Death by snoo-snoo
| |
Torsten Iversen (06-04-2001)
| Kommentar Fra : Torsten Iversen |
Dato : 06-04-01 17:01 |
|
In article <xjv66gie1qe.fsf@helgrind.ifi.uio.no>, Igor V. Rafienko wrote:
>* Rasmus Neckelmann
>
>[snip]
>
>> Hvad er problemet lige nøjagtigt?
>>
>> char *string="Dette er en string";
>
>
>At det er en implisitt typecast i tilordningen over som ikke
>nødvendigvis fungerer om et par år? (hint: hva er typen til RHS? Og
>LHS?)
>
Hvad er RHS og LHS? Hvaffor en typecast? Hvordan definerer du C
strengkonstanter, som nodvendigvis virker om nogle år?
Torsten
| |
Torsten Iversen (06-04-2001)
| Kommentar Fra : Torsten Iversen |
Dato : 06-04-01 17:20 |
|
In article <slrn9crq1s.53s.torsten@mega.cs.auc.dk>, Torsten Iversen wrote:
>In article <xjv66gie1qe.fsf@helgrind.ifi.uio.no>, Igor V. Rafienko wrote:
>>* Rasmus Neckelmann
>>
>>[snip]
>>
>>> Hvad er problemet lige nøjagtigt?
>>>
>>> char *string="Dette er en string";
>>
>>
>>At det er en implisitt typecast i tilordningen over som ikke
>>nødvendigvis fungerer om et par år? (hint: hva er typen til RHS? Og
>>LHS?)
>>
>
>Hvad er RHS og LHS? Hvaffor en typecast? Hvordan definerer du C
>strengkonstanter, som nodvendigvis virker om nogle år?
>
>Torsten
Nåja, "Dette er en string" er jo et array. Og RHS og LHS er engelske
forkortelser. Jeg blev lidt forvirret et ojeblik.
Men stadig. Hvorfor er det ikke sikkert at initialisere en char* som i
eksemplet?
Torsten
| |
Kaspar Daugaard (06-04-2001)
| Kommentar Fra : Kaspar Daugaard |
Dato : 06-04-01 18:02 |
|
> >>> Hvad er problemet lige nøjagtigt?
> >>>
> >>> char *string="Dette er en string";
> >>
> >>
> >>At det er en implisitt typecast i tilordningen over som ikke
> >>nødvendigvis fungerer om et par år? (hint: hva er typen til RHS? Og
> >>LHS?)
> >>
> >
> >Hvad er RHS og LHS? Hvaffor en typecast? Hvordan definerer du C
> >strengkonstanter, som nodvendigvis virker om nogle år?
> >
> >Torsten
>
> Nåja, "Dette er en string" er jo et array. Og RHS og LHS er engelske
> forkortelser. Jeg blev lidt forvirret et ojeblik.
>
> Men stadig. Hvorfor er det ikke sikkert at initialisere en char* som i
> eksemplet?
>
> Torsten
Fordi "Dette er en string" er et _konstant_ array. Godt nok tillader
standarden at caste til char* uden const_cast<>, men det er mildt sagt lidt
uhensigtsmæssigt fordi det ikke er tilladt at skrive til arrayet.
- Kaspar
| |
Kaspar Daugaard (06-04-2001)
| Kommentar Fra : Kaspar Daugaard |
Dato : 06-04-01 11:25 |
|
> et begynderspg., jf. subject: Hvordan går jeg omkring med at omdanne
en
> string til en char*? Umiddelbar tildeling (=) kan ikke bruges, og
> typecasting ej heller; jeg er åben for gode forslag.
std::string str = "test";
const char* cstr = str.c_str();
Bemærk at c_str() returnerer en const char-pointer, så hvis du vil læse
char-data ind i en string er du nødt til at gøre det via et char-array.
char data[42];
fread(data, sizeof(char), 42, my_file);
std::string str = data;
Eller noget i den stil.
- Kaspar
| |
Morten Nørgaard (06-04-2001)
| Kommentar Fra : Morten Nørgaard |
Dato : 06-04-01 11:57 |
|
"Kaspar Daugaard" <kdaugaard@spam-me.bigbluebox.com> wrote in message
news:ORgz6.350$cF4.61764@news6-win.server.ntlworld.com...
> > et begynderspg., jf. subject: Hvordan går jeg omkring med at omdanne
> en
> > string til en char*? Umiddelbar tildeling (=) kan ikke bruges, og
> > typecasting ej heller; jeg er åben for gode forslag.
>
> std::string str = "test";
> const char* cstr = str.c_str();
>
> Bemærk at c_str() returnerer en const char-pointer, så hvis du vil læse
> char-data ind i en string er du nødt til at gøre det via et char-array.
>
> char data[42];
> fread(data, sizeof(char), 42, my_file);
> std::string str = data;
>
> Eller noget i den stil.
>
> - Kaspar
>
Fremragende. Tak for det.
/Morten.
| |
|
|