konstanter String
-
ich will aber ein char array verwenden denn in C gibt es ja kein string
-
char tmp = new char[strlen(x)];Das compiled bei dir ? :o
-
blurry333 schrieb:
ich will aber ein char array verwenden denn in C gibt es ja kein string
Du postest hier aber im C++ forum und nicht im C-Forum....
-
cvcv schrieb:
blurry333 schrieb:
ich will aber ein char array verwenden denn in C gibt es ja kein string
Du postest hier aber im C++ forum und nicht im C-Forum....
In C gibt es auch kein new

-
kjhk schrieb:
cvcv schrieb:
blurry333 schrieb:
ich will aber ein char array verwenden denn in C gibt es ja kein string
Du postest hier aber im C++ forum und nicht im C-Forum....
In C gibt es auch kein new

True ^^ Aber zumindestens ein Äuqivalent. Naja, solange man keine Klassen mit benutzt.
-
ich muss einfach einen nicht konstanten String im main übergeben
char x[100]; int i; char* tmp="Das ist /*ein Kommentar*/ ein Hund"; for( i=0;tmp[i];i++) x[i]=tmp[i]; x[i]=0;Wie kann man denn noch einen non constant string anlegen ?
Ich muss ja erst in einer Schleife alles rüberkopieren.
Das ist mir zu aufwändig
-
blurry333 schrieb:
ich muss einfach einen nicht konstanten STring im main übergeben
char x[100]; int i; char* tmp="Das ist /*ein Kommentar*/ ein Hund"; for( i=0;tmp[i];i++) x[i]=tmp[i]; x[i]=0;Wieso deklarierst du i nicht um
for-Kopf? Und Kommentare innerhalb von Strings gibt es nicht. Und die Schleife kann man gut durchstrcpyersetzen...
-
EOutOfResources schrieb:
blurry333 schrieb:
ich muss einfach einen nicht konstanten STring im main übergeben
char x[100]; int i; char* tmp="Das ist /*ein Kommentar*/ ein Hund"; for( i=0;tmp[i];i++) x[i]=tmp[i]; x[i]=0;Wieso deklarierst du i nicht um
for-Kopf? Und Kommentare innerhalb von Strings gibt es nicht. Und die Schleife kann man gut durchstrcpyersetzen...Weil er anscheinend in C programmieren will und da muss man Variablen in der Regel am Blockanfang deklarieren.
Wenn wir uns schon auf C-Niveau befinden:
#include <stdio.h> #include <string.h> int main() { char x[100]; const char *tmp="Das ist /*ein Kommentar*/ ein Hund"; strcpy(x, tmp); printf("%s\n", x); }Und was hast du davon? Nichts. Lern lieber C++...
-
In C++:
#include <string> int main() { std::string foo("Ich bin ein Text"); std::string bar(foo + ", den man mit c_str in einen CString umwandeln kann"); }Sieht doch logischer und schöner aus, nicht?
-
#include <string.h> int main() { const char* const_string = "Hallo"; char non_const_string[30]; strcpy(non_const_string,const_string); non_const_string[1] = 'e'; return 0; }[Edit] editiert nach EOutOfResources' Hinweis.
-
Gugelmoser schrieb:
#include <string.h> int main() { const char* const_string = "Hallo"; const int size = strlen(const_string) +1; char non_const_string[size]; strcpy(non_const_string,const_string); non_const_string[1] = 'e'; return 0; }Du denkst, dass
strlenconstexpraus C++0x drauf hat, aber leider nicht...
-
Oder wenn es ein Array sein muss...
#include <vector> #include <iostream> #include <string> int main() { std::string tmp= "Das ist /*ein Kommentar*/ ein Hund"; std::vector<char> x(tmp.begin(), tmp.end()); x.push_back(0); // std::string hat keine Nullterminierung, also manuell eine anfügen std::cout << &x[0] << std::endl; return 0; }bzw.
#include <vector> #include <iostream> #include <string> int main() { const char *tmp= "Das ist /*ein Kommentar*/ ein Hund"; std::vector<char> x(tmp, tmp + strlen(tmp)); x.push_back(0); // Alternativ + 1 bei zweiten Parameter oben std::cout << &x[0] << std::endl; return 0; }
-
EOutOfResources schrieb:
Gugelmoser schrieb:
#include <string.h> int main() { const char* const_string = "Hallo"; const int size = strlen(const_string) +1; char non_const_string[size]; strcpy(non_const_string,const_string); non_const_string[1] = 'e'; return 0; }Du denkst, dass
strlenconstexpraus C++0x drauf hat, aber leider nicht...Das ist zumindest ein Feature, welches der GCC beherrscht. Der VC tut es eher nicht.

-
kjljkl schrieb:
Das ist zumindest ein Feature, welches der GCC beherrscht. Der VC tut es eher nicht.

Was ich damit sagen wollte, ist dass der Code nicht laufen sollte, da der Rückgabewert von
strlennoch nicht zur Compilezeit bekannt ist. Das ist bei einem Array auf dem Stack notwendig.
-
EOutOfResources schrieb:
kjljkl schrieb:
Das ist zumindest ein Feature, welches der GCC beherrscht. Der VC tut es eher nicht.

Was ich damit sagen wollte, ist dass der Code nicht laufen sollte, da der Rückgabewert von
strlennoch nicht zur Compilezeit bekannt ist. Das ist bei einem Array auf dem Stack notwendig.Stimmt, du hast natürlich recht, die Arraygröße muss hierbei eine Compiletime-Konstante sein, und bei mir war es eine Laufzeitkonstante.