Forum: Compiler & IDEs Präprozessor-Makro: Zeichenkette beschneiden


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,
ist es möglich, mit dem Präprozessor einen String zu beschneiden?

Nehmen wir an, ich habe die lange Zeichenkette _VERSION_ und will nur 
die ersten 20 Zeichen davon haben.

Viele Grüße
W.T.

von ghl (Gast)


Lesenswert?

Nein, der Präprozessor kann kein String split. Warum geht sowas nicht:
1
__attribute__((constructor)) void init_version_string() {
2
  static char version_[21];
3
  snprintf(version_, sizeof(version_), "%s", _VERSION_);
4
}
?

von Walter T. (nicolas)


Lesenswert?

ghl schrieb:
> Warum geht sowas nicht:

Es geht. "Es wäre nur schöner gewesen" , wenn sich das einfach in einem 
String hätte hinterlegen lassen.

Danke für die Antwort!
W.T.

von Dr. Sommer (Gast)


Lesenswert?

In C++11 gehts: http://ideone.com/qeD0qD

Der Compiler führt das Zuschneiden statisch zur Compile-Zeit durch. Die 
Variablen 'x', 'y' enthalten direkt den zugeschnittenen String (wie ein 
C-Array) (ohne dynamische Speicher-Verwaltung). Es wird nur der gekürzte 
String im Kompilat gespeichert (keine Speicherverschwendung), aber mit 
Null-Byte (könnte man auch weglassen).
Zum Testen werden die Strings ausgegeben.

Wenn du momentan C verwendest, kompiliere mit "g++ -std=c++11" statt 
"gcc" und der Code funktioniert.

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.