Steun Elkaar, Kopieer Nederlands Waar!
char bestandchar[j]; // <-- Dit mag niet! daar moet een constante staan, 15 ofzo.Op donderdag 24 januari 2002 10:08 schreef Skinkie het volgende:
ik ben weer een ochtentje aan het proberen een string om te zetten in char[]. Kan iemand me aub vertellen wat ik verkeert doe?
string bestand="./welcome.so";
int j=bestand.length();
char bestandchar[j]=bestand.data;
of...
int j=bestand.length();
char bestandchar[j];
for (int i=0; i<j; i++)
{
bestandchar[i]=bestand.getchar(i);
}
Nou kan je daar natuurlijk iets van 255 voor nemen omdat string nooit langer wordt
ja kan ook _MAX_PATH (Maximum length of full path ) nemen.
of je moet de char aray met malloc alloceren. (dan maakt ie dat stukje geheugen vrij voor jouw char array en dat kan on-the-fly)
bestandchar = (char*)malloc(sizeof(char)*j);
en dan aan het eind free(bestandchar);
/me weet geen leuke quote voor in zijn signature
met malloc krijg ik een error dat ik um niet gedeclared heb
moet er nog een char * voor?
moet er nog een char * voor?
Steun Elkaar, Kopieer Nederlands Waar!
ja klopt
eerst
char* bestandchar;
eerst
char* bestandchar;
/me weet geen leuke quote voor in zijn signature
Het is wel C++ waar we het over hebben, dus:Op donderdag 24 januari 2002 10:14 schreef KnoppenSpook het volgende:
[..]
of je moet de char aray met malloc alloceren. (dan maakt ie dat stukje geheugen vrij voor jouw char array en dat kan on-the-fly)
bestandchar = (char*)malloc(sizeof(char)*j);
en dan aan het eind free(bestandchar);
char* bestandchar = new char[j + 1];
De +1 is om een trailing zero te kunnen hebben om het einde van de string aan te geven. Om het geheugen vrij te geven doe je:
delete[] bestandchar;
Lees anders eens een boekje over C++, dit is echt basiskennis. Verder wordt het een ander verhaal als het een unicode-string is, dan moet alles keer twee enzo.
de bananen hebben gelijk
/me weet geen leuke quote voor in zijn signature
ik heb nu:
char *bestandchar = (char *)malloc(sizeof(char)*j);
*bestandchar = *bestand.data();
char *bestandchar = (char *)malloc(sizeof(char)*j);
*bestandchar = *bestand.data();
edit:
echter... er komt alleen het eerste teken uit bestandchar, als ik cout << bestand.data doe krijg ik wel output.
echter... er komt alleen het eerste teken uit bestandchar, als ik cout << bestand.data doe krijg ik wel output.
Steun Elkaar, Kopieer Nederlands Waar!
Zorg eerst dat je concepten als variabelen, pointers en geheugenallocatie begrijpt, voordat je weer een poging doet tot programmeren in C/C++.
Sowieso moet je (j+1) bytes alloceren, zoals Bananeman al zei, en daarbij wil je niet alleen het eerste karakter kopiëren, maar de hele string. Zo dus:
Of:
Overigens is hier ook gewoon een standaard functie voor, waarbij automagisch voldoende geheugen wordt gealloceerd:
Sowieso moet je (j+1) bytes alloceren, zoals Bananeman al zei, en daarbij wil je niet alleen het eerste karakter kopiëren, maar de hele string. Zo dus:
code:
1
| memcpy(bestandchar,bestand.data(),j+1); |
Of:
code:
1
| strcpy(bestandchar,bestand.data()); |
Overigens is hier ook gewoon een standaard functie voor, waarbij automagisch voldoende geheugen wordt gealloceerd:
code:
1
2
3
4
5
6
| string a="Dit is een test"; char *b=strdup(a.data()); ... free(b); |
Het enige wat ik krijg als ik niet bij die 2 sterretjes neer zet is een compiler error:
cannot convert 'const char*' to 'char' in assignment.
en ja ik moet ook een boek lezen... en ik ben van morgen ook druk op google aan het zoeken geweest maar staan gewoon nergens werkende voorbeelden hoe je string naar chararray moet doen.
dit zou moeten werken volgens:
http://www.bgsu.edu/departments/compsci/docs/string.html
string s = "abc def abc";
char ch[] = "aba daba do";
char *cp = ch;
cp = s.c_str();
ik krijg echter major errors.
cannot convert 'const char*' to 'char' in assignment.
en ja ik moet ook een boek lezen... en ik ben van morgen ook druk op google aan het zoeken geweest maar staan gewoon nergens werkende voorbeelden hoe je string naar chararray moet doen.
dit zou moeten werken volgens:
http://www.bgsu.edu/departments/compsci/docs/string.html
string s = "abc def abc";
char ch[] = "aba daba do";
char *cp = ch;
cp = s.c_str();
ik krijg echter major errors.
Steun Elkaar, Kopieer Nederlands Waar!
Thanx Soultaker, het werkt 
Heb je ook nog een boeken tip?
Heb je ook nog een boeken tip?
code:
1
2
3
4
5
6
7
8
9
| int main(int argc, char **argv)
{
string bestand="./welcome.so";
chat *bestandchar = strdup(bestand.data());
// cout << bestandchar;
shared(bestandchar);
free(bestandchar);
return=0;
} |
Steun Elkaar, Kopieer Nederlands Waar!
Nou nou collega,Op donderdag 24 januari 2002 10:29 schreef Bananeman2002 het volgende:
[..]
Het is wel C++ waar we het over hebben, dus:
char* bestandchar = new char[j + 1];
De +1 is om een trailing zero te kunnen hebben om het einde van de string aan te geven. Om het geheugen vrij te geven doe je:
delete[] bestandchar;
Lees anders eens een boekje over C++, dit is echt basiskennis. Verder wordt het een ander verhaal als het een unicode-string is, dan moet alles keer twee enzo.
Sowieso kun je memory© tegelijk doen met
code:
1
2
| std::vector<char> array(bestand.c_str(),
bestand.c_str()+bestand.length() ); |
En dan is &array[0] gewoon een char* naar kopie van je string. Die is dan gewoon bruikbaar alsof je een
char[precies_de_goede_grootte] had.
Maar waarom zou je met char*s willen klooien?
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Waarde collegaOp donderdag 24 januari 2002 14:57 schreef MSalters het volgende:
[..]
Nou nou collega,Unicode is helemaal niet maal 2. Is gewoon new wchar_t[j+1].
natuurlijk is het zo dat je wchar_t moet gebruiken, maar als je dat niet zou doen en het zaakje zou benaderen met een char*, dan is het dus wel maal 2.
Dat je zoiets in de praktijk niet doet is een tweede, maar ik wilde de OP niet afschrikken met nog meer zaken aan zijn hoofd aangezien zelfs memory allocation een probleem voor hem vormde. Overigens gebruik ik in de praktijk zelf vrijwel altijd Unicode.
Niet specifiek, maar Academic Service heeft meestal wel goedkope, eenvoudige maar complete boeken. Ik zou zeggen, ga zelf even in een boekenwinkel kijken welk boek je wel bevalt. Jij hebt waarschijnlijk het meeste baat bij een boek waar C++ volledig in wordt uitgelegd (dus niet zomaar een reference guide), maar dat wel als referentie te gebruiken is.Op donderdag 24 januari 2002 11:02 schreef Skinkie het volgende:
Heb je ook nog een boeken tip?
Maar nogmaals, dat kun je het beste zelf beoordelen als je wat verschillende boeken doorbladert. Ik kan je afraden om een boek te kopen waar veel dingen in staan die je niet meer dan één keer nodig gaat hebben.
Pagina: 1