Forum: Mikrocontroller und Digitale Elektronik Initialisierung über mehrere Zeilen verteilen


von Bernd (Gast)


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

von Peter II (Gast)


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

von Lucas K. (lucas_k)


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.

von Bernd (Gast)


Lesenswert?

Peter II schrieb:
> PROGMEM char SMTP_TEXT[] = "
> F\
> r\
> o\
> m\
....

Danke!

von Peter II (Gast)


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.

von Lucas K. (lucas_k)


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.

von Josef D. (jogedua)


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.

von jack (Gast)


Lesenswert?

und das wichtigste, den '\' vergessen...

Bevor du hier klugscheissen kannst brauchts nochn paar strenge winter...

von Josef D. (jogedua)


Lesenswert?

den '\' braucht man hier nach C-Regeln nicht!

von asdfg (Gast)


Lesenswert?

>> Bevor du hier klugscheissen kannst brauchts nochn paar strenge winter...
>       den '\' braucht man hier nach C-Regeln nicht!

Eins zu Null für Josef D., ich hol schon mal das Popcorn.

von Karl H. (kbuchegg)


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.

von Johann L. (gjlayde) Benutzerseite


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 :-)

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.