Hallo wie man an der Überschrift erkennen kann habe ich ein Warning
Problem und wollte wissen wie man das besser macht.
char cDay[] =
{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
;
und versuch es so zu verarbeiten
geht zwar aber das warning stört doch sehr
char * pBuffer = cDay[Day];
Glaube ich nicht, der meckert bei dem Code über was ganz anders. Ansonsten löst "const char*" das Problem. Oliver
Gast
#6076268
1 | |
2 | |
Martin M. schrieb: > char cDay[] ist ein einfaches char-Array, dessen Größe bei der Initialisierung festgelegt wird. Da passt ein String rein. Da du aber mehrere Strings ablegen möchtest, brauchst du entweder ein 2D-Array oder ein Array aus Zeigern auf char. Das wäre char * cDay[] Wobei es egal ist, ob der * beim char, beim cDay oder frei dazwischen steht.
cDay[Day] dereferenziert doch das als Pointer zu betrachtende Array,
d.h.
>char * pBuffer = cDay[Day];
versucht einen konkreten Wert einem Pointer zu zu weisen.
Was sagt der Compiler zu
char * pBuffer = &(cDay[Day]);
?
Jasson J. schrieb: > Was sagt der Compiler zu Das mag der Compiler akzeptieren, nur bekommst du dadurch nur verkürzte Ausgaben von "Sunday". ("nday" oder "ay" oder ...)
Gast
#6076494
String Literale sind nur lesbar und liegen in der Regel im Text-Segment. Das Setzen eines schreib/lese-Zeigers (hier: char*) würde die "Konstantheit" aushebeln, deswegen meckert der Compiler zu Recht. Selbst wenn der Compiler das kompiliert (in C, nicht in C++) muss der Compiler erst extra Code zum Umkopieren erzeugen, um die eigentlich konstanten Strings in einen (beschreibbaren) RAM-Bereich zu kopieren. Das kann man sich aber ersparen. Lange Rede - kurzer Sinn: Deklariere das ganze als Array von nur-lese-Zeigern auf konstante Stringliterale:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
Danke für die Antworten, habe ich alle schon probiert gehabt, da gibt es
kein Warning sondern Errors
const char* cDay[] =
{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
;
error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
const char* const cDay[] =
{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
;
invalid conversion from 'const char*' to 'char*' [-fpermissive]
bei
char* const cDay[] =
{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
;
^
lib\ILI_StatusBar4Time\src\StatusBar4Time.cpp:5:97: warning: ISO C++
forbids converting a string constant to 'char*' [-Wwrite-strings]
lib\ILI_StatusBar4Time\src\StatusBar4Time.cpp:5:97: warning: ISO C++
forbids converting a string constant to 'char*' [-Wwrite-strings]
Any clue guys
wolpino schrieb: > Selbst wenn der Compiler das kompiliert (in C, nicht in C++) muss der > Compiler erst extra Code zum Umkopieren erzeugen, um die eigentlich > konstanten Strings in einen (beschreibbaren) RAM-Bereich zu kopieren. Nein, sowas macht er nicht. Sowohl in C, als auch in C++ ist ein Stringliteral const. Es verboten, es zu beschreiben. Der Unterschied zwischen C und C++ ist, dass C die Konvertierung nach non-const char* trotzdem erlaubt, um alten Code aus der Zeit, bevor es const gab, weiter zu unterstützen. C++ ist da strikter. Martin M. schrieb: > Danke für die Antworten, habe ich alle schon probiert gehabt, da gibt es > kein Warning sondern Errors > > const char* cDay[] = > {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"} > ; > > error: invalid conversion from 'const char*' to 'char*' [-fpermissive] Aber bestimmt nicht an der Stelle! Du musst das const natürlich weiterhin mitziehen, also wenn du irgendwo den Zeiger einem anderen zuweist, muss der auch ein const char* sein. PS: Bitte benutze Code-Tags.
Danke Rolf M. da war doch was mit C und C++.
Ich bastele an einem C++ Programm und dann mus es so sein
char cMonth[12][10] =
{"January","February","March","April","May","June","July","August","Sept
ember","October","November","December"};
char cDay[7][10] =
{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
;
https://www.geeksforgeeks.org/array-strings-c-3-different-ways-create/
Super wieder was gelernt.
Martin M. schrieb: > Ich bastele an einem C++ Programm und dann mus es so sein Nein. Muss es nicht. Dein Fehler liegt nicht in der Definition der Strings, sondern in der Anwendung. Aber wenn du schon C++ machst, warum nimmst du nicht std::string?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.