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

Morten Nørgaard skrev:

> et begynderspg., jf. subject: Hvordan går jeg omkring med at omdanne en
>string til en char*?

String *er* en char*.

Hvad vil du opnå?

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

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.




Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste