/ 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
[c++]string til char
Fra : Allan Eriksen


Dato : 07-03-03 00:06

Hej

Jeg sidder og forsøger mig lidt med noget c++ i Linux, og har et array af
strings

#include <string> IKKE string.h
string slaves[10];

jeg skal have oprettet et bibliotek på HD'en der hedder det samme som hver
element i slaves arrayet. Derfor skal jeg bruge sprintf() til at sammensætte
"mkdir" og indholdet af slaves[] arrayet. Noget lignende dette:

char command[100];
for(int i=0;i<10,i++)
sprintf(command,"mkdir %s",slaves[i]);

Dette virker bare ikke, da sprintf() skal have en const char *, men den får
en string. Er der nogen, der har nogle ideer til hvordan jeg kan caste?? Har
prøvet en del, men intet virker!

mvh
Allan




 
 
Bertel Lund Hansen (07-03-2003)
Kommentar
Fra : Bertel Lund Hansen


Dato : 07-03-03 00:18

Allan Eriksen skrev:

>#include <string> IKKE string.h
>string slaves[10];

>jeg skal have oprettet et bibliotek på HD'en der hedder det samme som hver
>element i slaves arrayet. Derfor skal jeg bruge sprintf() til at sammensætte
>"mkdir" og indholdet af slaves[] arrayet.

Du kan vel godt sammensætte navnene som strings og vente med
konverteringen?

>char command[100];
>for(int i=0;i<10,i++)
> sprintf(command,"mkdir %s",slaves[i]);

>Dette virker bare ikke, da sprintf() skal have en const char *, men den får
>en string. Er der nogen, der har nogle ideer til hvordan jeg kan caste?

Du skal ikke caste. Du skal bruge strings indbyggede
konvertering:

   string test;
   char kommando[1000];

....   sprintf (kommando,"%s",test.c_str());

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

Robert Larsen (07-03-2003)
Kommentar
Fra : Robert Larsen


Dato : 07-03-03 09:19

Bertel Lund Hansen wrote:
> Allan Eriksen skrev:
>
>
>>#include <string> IKKE string.h
>>string slaves[10];
>
>
>>jeg skal have oprettet et bibliotek på HD'en der hedder det samme som hver
>>element i slaves arrayet. Derfor skal jeg bruge sprintf() til at sammensætte
>>"mkdir" og indholdet af slaves[] arrayet.
>
>
> Du kan vel godt sammensætte navnene som strings og vente med
> konverteringen?
>
>
>>char command[100];
>>for(int i=0;i<10,i++)
>> sprintf(command,"mkdir %s",slaves[i]);
>
>
>>Dette virker bare ikke, da sprintf() skal have en const char *, men den får
>>en string. Er der nogen, der har nogle ideer til hvordan jeg kan caste?
>
>
> Du skal ikke caste. Du skal bruge strings indbyggede
> konvertering:
>
>    string test;
>    char kommando[1000];
>
> ...   sprintf (kommando,"%s",test.c_str());
>
Og i stedet for at spawne en ny process (mkdir programmet) til at
oprette biblioteket kunne du jo bruge 'mkdir' system kaldet:

SYNOPSIS
#include <sys/stat.h>
#include <sys/types.h>

int mkdir(const char *pathname, mode_t mode);


Robert


Mogens Hansen (07-03-2003)
Kommentar
Fra : Mogens Hansen


Dato : 07-03-03 06:42


"Allan Eriksen" <holst@nork.auc.dk> wrote in message
news:b48k00$qpj$1@sunsite.dk...

[8<8<8<]
> char command[100];
> for(int i=0;i<10,i++)
> sprintf(command,"mkdir %s",slaves[i]);

brug klassen "std::ostringstream" i stedet for "sprintf":
#include <sstream>
// ..
ostringstream os;
os << "mkdir " << slaves[i];

så slipper du for
* muligheden for buffer overrun (alternativt explicit memory håndtering)
* run-time problemer med typer

Venlig hilsen

Mogens Hansen



Allan Eriksen (08-03-2003)
Kommentar
Fra : Allan Eriksen


Dato : 08-03-03 20:10

Tak for svarene...nu virker det! Brugte Bertels forslag, da det krævede
mindst ænringer i koden :)

mvh
allan
"Allan Eriksen" <holst@nork.auc.dk> skrev i en meddelelse
news:b48k00$qpj$1@sunsite.dk...
> Hej
>
> Jeg sidder og forsøger mig lidt med noget c++ i Linux, og har et array af
> strings
>
> #include <string> IKKE string.h
> string slaves[10];
>
> jeg skal have oprettet et bibliotek på HD'en der hedder det samme som hver
> element i slaves arrayet. Derfor skal jeg bruge sprintf() til at
sammensætte
> "mkdir" og indholdet af slaves[] arrayet. Noget lignende dette:
>
> char command[100];
> for(int i=0;i<10,i++)
> sprintf(command,"mkdir %s",slaves[i]);
>
> Dette virker bare ikke, da sprintf() skal have en const char *, men den
får
> en string. Er der nogen, der har nogle ideer til hvordan jeg kan caste??
Har
> prøvet en del, men intet virker!
>
> mvh
> Allan
>
>
>



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408193
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste