Forum: PC-Programmierung C String Warning


von Werz (Gast)


Lesenswert?

Hallo,

folgender Code:
1
char Cmd[]= "TESTSTRING\r";

Irgendwo später im Code (Cmd ist noch im Scope und existiert noch), will 
ich den Inhalt vom Cmd ändern:
1
*Cmd= "TESTSTRING2\r";

Warum wird hier eine Warning "assignment makes pointer from integer 
without a cast" ausgegeben?

Danke!

: Verschoben durch Moderator
von Thomas (Gast)


Lesenswert?

Weil du ihn mit *Cmd (pointer) ansprichst?

von MaWin (Gast)


Lesenswert?

Du schreibst an Hauptspeicheradresse 84 den Zahlenwert der der 
Speicherposition des String TESTSTRING2 entspricht.
Das ist schon eine Warnung wert.
Grundlagenbuch C Programmierung kaufen ?

von Torsten (Gast)


Lesenswert?

Das, was du suchst, ist die Funktion strcpy() oder strncpy().

von Mike R. (thesealion)


Lesenswert?

Einfach gesagt, weil das nicht geht.

Cmd[] ist ein Array und kein Pointer.

Außerdem ist dein neuer String größer als der alte, das funktioniert in 
C auch nicht.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

In C lassen sich leider, außer bei Variablendefinitionen mit 
Initialisierungswert, keine Strings bzw. Character-Arrays einfach so 
zuweisen und aneinanderhängen. Stattdessen muss man Funktionen wie 
strcpy(), strcat() arbeiten. Das hängt vor allem damit zusammen, dass es 
keine echten Stringtypen und Arrayzuweisungen gibt, letzte vor allem 
deswegen, weil Arrays ihre eigene Länge nicht enthalten.

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Werz schrieb:
> Hallo,
>
> folgender Code:
>
1
> char Cmd[]= "TESTSTRING\r";
2
>
>
> Irgendwo später im Code (Cmd ist noch im Scope und existiert noch), will
> ich den Inhalt vom Cmd ändern:
>
>
1
> *Cmd= "TESTSTRING2\r";
2
>
>
> Warum wird hier eine Warning "assignment makes pointer from integer
> without a cast" ausgegeben?
>
> Danke!

Das ist so ziemlich der Standardfehler in C mit Strings, google ist voll 
mit Erklärungen dazu.

Aber:

1. Hat Cmd auch nur Platz für 12 Zeichen (den String + 0 Terminator), 
dem einen größeren String zuzuweisen ist ne 1A Nummer für Fehler. Mach 
Cmd entweder entsprechend Groß oder reserviere dafür den Speicher 
dynamisch.

2. Benutz die string.h, dann kannst du auch strcpy bzw. strncpy benutzen 
um Strings zuzuweisen.

von Torsten (Gast)


Lesenswert?

Tipp noch an dieser Stelle: Füttere die Suchmaschine deines Vertrauens 
mal mit "openbook c". Da werden solche Dinge, wie ich finde, recht gut 
beschrieben und dann sind dir die Hintergründe auch klar.

von Werz (Gast)


Lesenswert?

Danke an alle, strncpy habe ich tatsächlich gesucht ;)

LG

von Dirk B. (dirkb2)


Lesenswert?

Werz schrieb:
> Danke an alle, strncpy habe ich tatsächlich gesucht ;)


Nein, hast du nicht!

Jetzt ist dein Array nicht mehr Null-terminiert und somit ist es kein 
gültiger C-String mehr.

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.