C int nach char* Konvertierung

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c_int_nach_char_konvertierung_219576/page_1 - zur Vollversion wechseln!


M.I.P.S. schrieb am 14.10.2010 um 16:53

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:

Code:
#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:
Code:
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:
Code:
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.

:confused:

Irgendwelche Ideen, worans liegt bzw. wie ichs besser machen könnte?
tia


ARRAY schrieb am 14.10.2010 um 18:32

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. schrieb am 14.10.2010 um 19:33

Jup, des wars.

Hab jetzt die Struct an die Funktion mitübergeben und jetzt funktionierts.

thx


DirtyHarry schrieb am 15.10.2010 um 10:19

ich hoffe auch mit bereits initialisierten char array, sonst hast das gleiche in grün, nur dass es blau ist :)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025