gcc beschwert sich über zu kurze char arrays

OP #4057913
Lesenswert?
• ▲
▼
1
static const char c_a[5] = "12345";

sollte doch perfekt legaler c-Code sein. Wieso beschwert sich der gcc 
(AVR8/GNU C Compiler : 4.8.1) mit:

> error: initializer-string for array of chars is too long [-fpermissive]

Der Standard sagt explizit in 6.7.8.14:
1
An array of character type may be initialized by a character string 
2
literal, optionally enclosed in braces. 
3
Successive characters of the character string literal (including the
4
terminating null character if there is room or if the array is of
5
 unknown size) initialize the elements of the array.
OP #4057921
Lesenswert?
• ▲
▼
Marvin schrieb:
> Falsch. "12345" ist sechs Zeichen.

das habe ich nicht bestritten.

Du hast aber auch den von mir zitierten Abschnitt aus dem C-Standard 
nicht gelesen.
Der Besagt nämlich, dass aus dem String literal nur so viele Zeichen 
benutzt werden, wie Platz in dem Array ist.


Aber ich hab den FEhler gefunden:

mein Dateiname hat am Ende noch 2 zusätzliche 'p's :)

Und der c++ standard sieht das scheinbar anders.
Gast #4059603
Lesenswert?
• ▲
▼
Der eine sagt Programmierfehler, der andere nennt es schlechten Stil. 
Wenn jemand das betrachtet, kann er nicht erkennen was du wolltest:
- 4-Zeichen string, der falsch initialisiert wird
- 5-Zeichen string, wobei Speicher für \0 vergessen wurde

Wir können ja mal abstimmen. ;-)
OP #4059613
Lesenswert?
• ▲
▼
ein kommentar gehört natürlich dahinter aber
1
static const char c_sequence[] = "____--__----_-__-_,-._";

ist deutlich besser zu lesen als
1
static const char c_sequence[] = {'_','_','_','_','-','-','_','_','-','-','-','-','_','-','_','_','-','_',',','-','.','_'};

ich hätte halt nur gern das `sizeof` bzw, ARRAY_SIZE die richtige größe 
liefert;
#4059651
Lesenswert?
• ▲
▼
warning schrieb:
> Wenn jemand das betrachtet, kann er nicht erkennen was du wolltest:
> - 4-Zeichen string, der falsch initialisiert wird
> - 5-Zeichen string, wobei Speicher für \0 vergessen wurde

Für mich ist offensichtlich, daß er keins davon wollte, sondern einen 
5-Zeichen-String, der mit Absicht nicht nullterminiert sein soll. C 
lässt sowas ganz bewusst zu.
Gast #4060404
Lesenswert?
• ▲
▼
Bei der Frage Programmierfehler ja/nein, gilt als sollcher eben auch mit 
dem falschen Compiler zu übersetzen. ".cpp" ist eben nicht ".c".
GCC läßt sich aber mit -fpermissive dazu überreden, hier die C++ Syntax 
nicht allzu penibel auszulegen, denn er ahnt ja was gemeint war.
Gast #4060430
Lesenswert?
• ▲
▼
@KHB
Betrachtet man nur die code Zeile, ist nicht erkennbar, was der 
Programmierer wollte. In meinem Beispiel fehlt am Ende das d. Absicht 
oder Fehler?
Ich halte das daher für einen schlechten Stil. Nicht alles was erlaubt 
ist, ist gut und muss ausgenutzt werden. ;-)

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.