mikrocontroller.net

Forum: Compiler & IDEs strcat Probleme


Autor: jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich will die Temperatur aus einem DS1631 lesen und diese an den UART
schicken. Das klappt soweit auch ganz gut. Mein Problem ist nun das es
irgendwie Probleme beim zusammenkopieren der Strings gibt.

Hier mal etwas Code:


typedef char* string;
void main(void)
{
    string text, str_temp;
    .
    .
    temp1 = i2c_readAck();
    temp2 = i2c_readNak();
    text = "Die aktuelle Temperatur ist: ";
    str_temp = make_str(temp1);
-> bis hier hin ist noch alles okay, mit dem strcat scheint er Probleme
zu haben. Warum?
    strcat(text, str_temp);
}

Ich hab oben mal alles schritweise Ausgeklammert und nur wenn der
strcat mit drin ist hängt sich das Prg auf.

Danke schon mal für Tips und Hinweise, der Jochen (der jetzt ins Bett
geht)

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

müsste da folgendes stehen?

strcat(text, &str_temp);
             ^
Der Jochen

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein.  Sorry, wenn das jetzt hart klingt, aber Du solltest Dir
wirklich erstmal ein gutes C-Buch besorgen.  C läßt sich übrigens
besser auf Universalcomputern lernen als auf Microcontrollern,
vorzugsweise mit einem Betriebssystem, daß illegale Speicherzugriffe
ahndet (also nicht CP/M, MS-DOS, Win9x -- die stürzen dann nämlich
gleich komplett ab).

Deine Frage nach dem & zeigt nur, daß Du den Zusammenhang zwischen
Feldern (Arrays) und Zeigern leider nicht verstanden hast: bei der
Übergabe an Funktionen werden Felder ausschließlich als Zeiger (also
per Referenz) übergeben.  Das Ampersand wäre in diesem Deinem Fall
zwar harmlos, ist es aber nicht immer, also schreibt man es besser
nicht hin.

Viel schlimmer ist aber, daß Du Dir keinerlei Gedanken darum gemacht
hast, wo eigentlich Dein kombinierter String wirklich im Speicher
landen soll.  Letztendlich überschreibst Du wild irgendein Stück
RAM, das Dir ,,nicht gehört'' (nämlich das Stück, das hinter dem
String "Die aktuelle Temperatur ist: " zufällig im RAM gelegen ist).
Du mußt Dir also grundlegend Gedanken machen, welcher Speicher
wofür belegt wird, C bietet Dir eben keinerlei Laufzeitunterstützung,
die dies für Dich automatisch erledigen würde.

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab ein gutes C-Buch (K&R). Hab auch schon mal vor einiger Zeit
einen C-Kurs gemacht. Mein Problem ist allerdings das ich ewig nichts
mehr in C gemacht habe. So ein kleiner Denkanstoss
>Letztendlich überschreibst Du wild irgendein Stück
>RAM, das Dir ,,nicht gehört'' (nämlich das Stück, das hinter dem
>String "Die aktuelle Temperatur ist: " zufällig im RAM gelegen
ist).
wie Deiner oben hilft mir dann auch wieder auf die Sprünge.

Danke für die Hilfe, der Jochen.

Der von C leider schon wieder viel zu viel vergessen hat.
.

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.