Initialisierung über mehrere Zeilen verteilen

Gast #2807396
Lesenswert?
• ▲
▼
Hi,

ich habe auf dem AVR NET IO in der sendmail.c vom Ulrich Radig das 
"Problem" das ich bei dem
1
PROGMEM char SMTP_TEXT[] = "From: \"AVR-NET-IO\" <"__SMTP_MAIL_FROM__">\r\nTo:<"__SMTP_MAIL_TO__">\r\nSubject: Test_Email!\r\n\r\nHallo\r\nNa wie gehts? Mir gehts prima.";

so eine lange Initialiserung habe, dass ich die gerne über mindestens 
zwei Zeilen machen würde, doch ich weiss nicht wie das geht.
Kann mir da einer Helfen?

Gruss der Bernd
Gast #2807402
Lesenswert?
• ▲
▼
1
PROGMEM char SMTP_TEXT[] = "
2
F\
3
r\
4
o\
5
m\
6
:\
7
 \
8
\"\
9
A\
10
V\
11
R\
12
-\
13
N\
14
E\
15
T\
16
-\
17
I\
18
O\
19
\"\
20
 <"__SMTP_MAIL_FROM__">\r\nTo:<"__SMTP_MAIL_TO__">\r\nSubject: \
21
Test_Email!\r\n\r\nHallo\r\nNa wie gehts? Mir gehts prima.";
#2807403
Lesenswert?
• ▲
▼
Kennst du diese Taste rechts neben den Buchstaben? Die mit dem Pfeil, 
der zuerst nach unten und dann nach links geht?
Damit kann man neue Zeilen machen und dem Compiler ist egal, über 
wieviele Zeilen du deinen Code verteilst.

Genauso geht es auch andersrum und und du kannst mehrere Befehle mit ; 
getrennt in eine Zeile schreiben.
Gast #2807413
Lesenswert?
• ▲
▼
Lucas K. schrieb:
> Kennst du diese Taste rechts neben den Buchstaben? Die mit dem Pfeil,
> der zuerst nach unten und dann nach links geht?
> Damit kann man neue Zeilen machen und dem Compiler ist egal, über
> wieviele Zeilen du deinen Code verteilst.

schön geschrieben aber inhaltlich falsch.
#2807423
Lesenswert?
• ▲
▼
@Peter:
Ich hab mich vielleicht ein bisschen zu kurz gefasst:
Man kann mit einem Return natürlich nicht innerhalb eines Strings ohne 
neue Anführungszeichen Trennen, wie du es gezeigt hast. Aber man könnte 
damit die Variablen in eine neue Zeile verschieben. Und auch mit 
Tabs/Leerzeichen ordnen.
#2807436
Lesenswert?
• ▲
▼
ich würd's so machen:
1
PROGMEM char SMTP_TEXT[] = 
2
    "From: \"AVR-NET-IO\" <"__SMTP_MAIL_FROM__">\r\n"
3
    "To:<"__SMTP_MAIL_TO__">\r\n"
4
    "Subject: Test_Email!\r\n"
5
    "\r\n"
6
    "Hallo\r\n"
7
    "Na wie gehts? Mir gehts prima.";
Dann kann man sich auch vorstellen, wie's in etwa aussieht.
#2807520
Lesenswert?
• ▲
▼
jack schrieb:
> und das wichtigste, den '\' vergessen...
>
> Bevor du hier klugscheissen kannst brauchts nochn paar strenge winter...

Und du ein gutes C Buch.

Man kann einen String IMMER in mehrere Teile unterteilen. Der Compiler 
muss mehrere Stringliterale, die hintereinander kommen, zu einem 
einzigen zusammenfassen.

Und genau deswegen funktioniert die Lösung von Josef D. perfekt.
Persönliche Seite #2807656
Lesenswert?
• ▲
▼
Es geht auch ohne \ und man kann schöne einrücken.

Übrigens fehlt bei PROGMEM ein "const":
1
#ifdef WINDOS
2
#define NL "\r\n"
3
#else
4
#define NL "\n"
5
#endif
6

7
const char SMTP_TEXT[] PROGMEM =
8
    "From: \"AVR-NET-IO\" <" __SMTP_MAIL_FROM__ ">" NL
9
    "To:<" __SMTP_MAIL_TO__ ">" NL
10
    "Subject: Test_Email!" NL
11
    NL
12
    "Hallo" NL
13
    "Na wie gehts? Mir gehts prima.";

Ah, steht ja schon oben bei Josef :-)

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.