www.mikrocontroller.net

Forum: Compiler & IDEs Pointer Standard Frage


Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerade eben hat man mich noch belehrt, so solltes gehn:
 struct DataType
 {
     char person[10];
     ...
 } Data;
 
 char *ptr;


strcpy(Data.person, ptr);

Abschließendes Nullbyte vorausgesetzt...

Autor: Mirko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
char *ptr;
char Hilfsvariable[10];

und die Struktur:
struct DataType
{
    char person[10];
    int time;
    ...
} Data;

In ptr steht zu Beginn eine Zahl z.B. 123456.123 - jetzt mache ich damit 
folgendes:
*(ptr + 6) = '\0';              // Terminierung nach dem 6. Zeichen 
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:
sprintf (Hilfsvariable,"%u",Data.time);
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

Autor: Gast (Gast)
Datum:

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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Pete K. (pete77)
Datum:

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

Autor: Trohl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte was meinst du?? oO

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.