Hi, On Thu, 10 Oct 2002, Christian Weickhmann wrote:
Ich bin mir nicht ganz sicher, wie man am besten vorgeht, wenn man aus einem unsigned char* ein char* machen möchte.
Folgendes Problem:
// --- 8< ------------------ // Alle Includes da. typedef unsigned char xmlChar; xmlChar* name; char* n;
strcpy(n, name); // Führt zum Absturz mit SIGSEGV
Keine Wunder, weder n noch name sind initialisiert, bzw., wenn es globale Variablen waren auf 0 initialisiert. und strcpy(0, 0); erzeugt natuerlich ne SEGV.
Meine Frage nun: Wie mache ich aus einem unsigned char (xmlChar) ein char? Danke!
Irgendwie bin ich nicht sicher, ob du weisst, was du willst. Willst du ne Typkonvertierung, z.B. um Funktion mit als 'char *' deklarierten Argumenten, mit 'unsigned char *' Parametern aufzurufen? Dann willst du einen Typecast: void f(char * bla) { ... } voif g() { unsigned char *string = "Hallo"; f ((char*) string); } Oder willst du wirklich einen neuen String anlegen, der den gleichen Inhalt wie ein anderer hat, aber einen anderen Typ? In dem Fall ist strcpy() gar nicht so falsch, aber natuerlich muss schon der Speicher alloziert sein: void g () { unsigned char *string = "Hallo"; char *as_char; as_char = (char*) malloc (strlen (string) + 1); strcpy (as_char, string); ... free (as_char); } Aber das ist hoechstwahrscheinlich _nicht_ was du willst. Um nur den Typen zu aendern ist es nicht erforderlich Speicherbereiche hin- und herzukopieren. Ciao, Micha.