Forum: Compiler & IDEs strcat Probleme


von jochen (Gast)


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)

von Jochen (Gast)


Lesenswert?

Hallo,

müsste da folgendes stehen?

strcat(text, &str_temp);
             ^
Der Jochen

von Joerg Wunsch (Gast)


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.

von Jochen (Gast)


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.
.

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.