C++ String auffüllen

HansJ

Mitglied
Hallo,
ich möchte einem String "szZStand" Leerstellen voran stellen so das dieser eine vorgegebene Länge "12" ereicht.
Leider funktionieren meine Zeilen nicht, nach dem 2. Durchlauf der Schleife "Laenge:" ist szBuffer leer.
Was mache ich falsch ?

TCHAR szZStand[13];
TCHAR szBuffer[13] = TEXT("");
TCHAR szAuffuellen[13] = TEXT("");

wcscpy(szBuffer, szZStand);
Laenge:
len = wcslen(szBuffer);
if (len < 12)
{
wcscat(szAuffuelen, TEXT(" "));
wcscat(szBuffer, TEXT(" "));
goto Laenge;
}
wcscat(szAuffuelen, szZStand);
wcscpy(szZStand, szAuffuelen);
 
So könnte es gehen (ist nicht getestet!):
Code:
 TCHAR szZStand[13];	// Da steht dann der Text drin
  TCHAR szBuffer[13] = TEXT("			"); //12 Leerzeichen
 int iLen, iStart;
 
 iLen = wcslen(szZStand);
 iStart = 12 - iLen;
 wcsncpy(szBuffer + iStart, szZStand, iLen);
  	wcscpy(szZStand, szBuffer);
 
jokey2
Das funktioniert prima !
Aber ich verstehe nicht was mit "szBuffer + iStart" in der Zeile
wcsncpy(szBuffer + iStart, szZStand, iLen);
passiert ?
 
Nun, in szBuffer ist ein String mit 12 Leerzeichen. In der zitierten Zeile überschreibe ich die letzten Leerzeichen mit dem Inhalt von szZStand. Wenn z.B. szZStand 5 Zeichen lang ist, dann kopiere ich diesen String so in den Buffer, daß er am Ende des Buffers steht, fange also 5 Zeichen vor dem Ende mit Kopieren an.
Funktioniert das von deepthroat mit dem swprintf nicht? Das halte ich für eleganter. Bei meiner Lösung mußt Du sicher sein, daß szZStand nie länger als 12 Zeichen ist, sonst kracht es.
 
Leider nein damit bekomme ich die Fehlermedung:
warning C4133: 'function' : incompatible types - from 'char [5]' to 'const unsigned short *'
 
Da mußt du wie bei den anderen String Literalen auch das Makro TEXT verwenden.

Du kannst übrigens auch die Breite die das Feld haben soll als Parameter angeben:
Code:
TCHAR szZStand[13];
TCHAR text[13];

swprintf (text, TEXT("%*s"), 12, szZStand);

Allerdings solltest du dabei beachten, das der String szZStand nicht größer als der Ziel-Puffer "text" sein darf. Um auf der sicheren Seite zu sein solltest du das entweder vorher abprüfen, oder aber die Funktion _snwprintf verwenden wo man eine Maximalgröße angeben kann.

Gruß
 
Zurück