Forum: Compiler & IDEs Pointer Standard Frage


von Mirko (Gast)


Lesenswert?

hallo Forum,

bin grad in meinem Programm an eine Stelle gekommen an der ich irgendwie 
festhakt - is eigentlich ne C-Standard Sache aber irgendwie hab ich grad 
nen Knoten. Ich habe:

die Struktur:

struct DataType
{
    char person[10];
    ...
} Data;

und die Variable:

char *ptr;

Mein pointer ptr zeigt auf einen Namen, den ich einfach nur in 
Data.person abgespeichert haben möchte.

Hab schon ne Menge Kombinationen mit strcpy, sprintf usw. versucht, aber 
irgendwie habe ich immer den falschen Inhalt (wahrscheinlich die Adresse 
des pointers oder so) zugewiesen.

mfg
Mirko

von Sven P. (Gast)


Lesenswert?

Gerade eben hat man mich noch belehrt, so solltes gehn:
1
 struct DataType
2
 {
3
     char person[10];
4
     ...
5
 } Data;
6
 
7
 char *ptr;
8
9
10
strcpy(Data.person, ptr);

Abschließendes Nullbyte vorausgesetzt...

von Mirko (Gast)


Lesenswert?

danke vielmals - hätt schwören können, dass ich das gleich als Erstes 
ausprobiert hatte - naja egal, die Hauptsache ist jetzt gehts...

Allerdings klemmts jetzt an ner anderen Stelle mit was ähnlichem

also wie gehabt der Pointer:
1
char *ptr;
2
char Hilfsvariable[10];

und die Struktur:
1
struct DataType
2
{
3
    char person[10];
4
    int time;
5
    ...
6
} Data;

In ptr steht zu Beginn eine Zahl z.B. 123456.123 - jetzt mache ich damit 
folgendes:
1
*(ptr + 6) = '\0';              // Terminierung nach dem 6. Zeichen 
2
Data.time = atoi (ptr);            // Umrechnen in int wert

Zur Kontrolle ob die Zeit auch wirklich richtig in Data.time steht 
möchte ich sie mir im weiteren über den uart ausgeben. Dazu schreibe 
ich:
1
sprintf (Hilfsvariable,"%u",Data.time);
2
uart_puts (Hilfsvariable);

Da kommt dann allerdings eine ganz andere Zahl raus, die nichts mit der 
Zeit zu tun hat. Seht ihr vielleicht den Fehler den ich mache?

schönen Abend noch
Mirko

von Gast (Gast)


Lesenswert?

Ahem, 123456 ist für einen 16-Bit int nicht darstellbar. Wahrscheinlich 
ist dass das Problem.

von yalu (Gast)


Lesenswert?

> In ptr steht zu Beginn eine Zahl z.B. 123456.123

Worauf zeigt ptr? Auf ein char-Array? Ist dieses groß genug für die
o.g. Zahl plus die End-'\0'?

Das das Programm für einen Mikrocontroller zu sein scheint, sind aber
wahrscheinlich die von Gast angesprochenen 16-Bit das Problem.

von Pete K. (pete77)


Lesenswert?

Wie wäre es, für Zahlen die vordefinierten Variablen-Defines zu benutzen 
?

von Trohl (Gast)


Lesenswert?

Bitte was meinst du?? oO

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.