C int nach char* Konvertierung
M.I.P.S. 14.10.2010 - 16:53 1653 3
M.I.P.S.
Big d00d
|
Hej Ich muß in einem in C geschriebenen Programm (Spread Toolkit) einige Daten verschicken. Dummerweise unterstützt Spread nur char* in einem Struct als Inhalt, weswegen ich einige Datentypen konvertieren muß, z.B. int. Ich hab eine Funktion geschrieben, die aber ein nicht nachvollziehbares Verhalten zeigt: #include <stdio.h>
#include <string.h>
typedef struct dummy_scat_element{
char *buf;
int len;
} scat_element;
scat_element make_scat_from_int(int i)
{
scat_element scat;
char content[12]; //4 byte int: max 10 digits + signum + '\0'
char *p_pos;
sprintf(content, "%d", i);
scat.buf = content;
//printf("Inhalt von scat.buf: %s\n", scat.buf);
p_pos = strchr(scat.buf, '\0');
scat.len = (int) (p_pos - scat.buf);
return scat;
}
void main()
{
scat_element scat = make_scat_from_int(34567890);
printf("The char array is %d elements long\nThe elements are: ", scat.len);
printf("%s", scat.buf);
printf("\n");
}
Die Ausgabe dazu ist: The char array is 8 elements long
The elements are: @
Das seltsame ist, wenn man die printf Funktion (Zeile 17) verwendet wird das Richtige ausgegeben: Inhalt von scat.buf: 34567890
The char array is 8 elements long
The elements are: 34567890
Deto bei beliebigen Ausgaben mit Variable. Bei statischen Strings bleibt die falsche Ausgabe. Irgendwelche Ideen, worans liegt bzw. wie ichs besser machen könnte? tia
|
ARRAY
Little Overclocker
|
Ich denke nur mal laut Meiner Meinung nach fällt dein Problem unter den Begriff: "Geltungsbereich von Variablen" Du erstellst in der Funktion "make_scat_from_int" die Variable "content", einen Pointer auf 12 lokal(!!) allokierte Elemente (=Array), dann schreibst du in "scat.buf" die Adresse auf die "content" zeigt. Wenn du nun aber "return scat" machst gibst du auch "scat.buf", also die Adresse auf die "content" zeigt zurück. Das Problem ist nur, dass "content" auf einen lokal allokierten Speicher verweist und daher von außen nicht erreichbar ist. hth
|
M.I.P.S.
Big d00d
|
Jup, des wars.
Hab jetzt die Struct an die Funktion mitübergeben und jetzt funktionierts.
thx
|
DirtyHarry
aka robobimbo
|
ich hoffe auch mit bereits initialisierten char array, sonst hast das gleiche in grün, nur dass es blau ist
|