%s
-
Kann mir wer sagen wofür %s steht?
printf("Sendet: %s\n",buf);
-
1. Falsches Forum. Das gehört in Ansi C Forum
2. %s bedeutet, dass das argument in const char* sein soll. (bei dir ist das buf)Simon
-
Das ist ein Platzhalter. Und, falsches Forum.
-
Alles falsch. "%s" innerhalb einer Zeichenkette führt dazu, dass zuerst das Zeichen '%' gefolgt von dem Buchstaben 's' in der Zeichenkette auftauchen.
-scnr-
-
Dieser Thread wurde von Moderator/in dEUs aus dem Forum C# und .NET in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Sorry LordJaxon,
LordJaxom schrieb:
Alles falsch. "%s" innerhalb einer Zeichenkette führt dazu, dass zuerst das Zeichen '%' gefolgt von dem Buchstaben 's' in der Zeichenkette auftauchen.
-scnr-
aber das stimmt hier nicht. Der String, in dem das '%s' steht, ist ein
Formatstring. Hier wird das %s, wie z.B. auch %d, %u ..., als Platzhalter
interpretiert.David_pb und simon.gysi haben Recht.
Man-Page von printf:
int printf(const char *format, ...); Format des Formatstrings Der Formatstring ist eine Zeichenkette, die, so vorhanden, in ihrem initialen Shift-Zustand beginnt und endet. Der Formatstring setzt sich zusammen aus Null oder mehr Anweisungen: normale Zeichen (nicht %), welche unverändert zum Ausgabekanal kopiert werden; und Umwandlungsspezifikationen, welche jeweils null oder mehr Argumente fordern. Jede Umwandlungsspezifikation wird durch das Zeichen % eingeleitet und endet mit einem Umwandlungsspezifikator. Dazwischen können (in dieser Ordnung) null oder mehr Flags, eine optionale minimale Feldbreite, eine optionale Genauigkeit und ein optionaler Längenmodifikator.
Du hast im folgenden Fall Recht:
#define FORMAT "%s\n" printf( FORMAT, "%s");
was das gleiche ist wie:
printf("%s\n", "%s");
Im obigen Beispiel ist der erste String der Formatstring, bei dem das
"%s" durch den zweiten String ersetzt wird.Gruß mcr
-
mcr schrieb:
Du hast im folgenden Fall Recht:
#define FORMAT "%s\n" printf( FORMAT, "%s");
was das gleiche ist wie:
printf("%s\n", "%s");
Im obigen Beispiel ist der erste String der Formatstring, bei dem das
"%s" durch den zweiten String ersetzt wird.Gruß mcr
falsch. es müsste schon
Du hast im folgenden Fall Recht:
#define FORMAT "%s\n" printf( FORMAT, "%%s");
was das gleiche ist wie:
printf("%s\n", "%%s");
heißen, wenn du den gewünschten effekt haben willst :p
-
Machine schrieb:
falsch. es müsste schon
Du hast im folgenden Fall Recht:
#define FORMAT "%s\n" printf( FORMAT, "%%s");
was das gleiche ist wie:
printf("%s\n", "%%s");
heißen, wenn du den gewünschten effekt haben willst :p
Sorry, dass ich dich enttäuschen muss. Aber du hast Unrecht:
#include <stdio.h> #define FORMAT "%s\n" int main(void) { printf( FORMAT, "%s" ); printf( FORMAT, "%%s" ); return 0; }
liefert:
%s %%s
Wie du siehst: ich habe Recht.
Gruß mcr
-
mcr schrieb:
aber das stimmt hier nicht. Der String, in dem das '%s' steht, ist ein
Formatstring.Falls die Ironie nicht rübergekommen sein sollte:
In C# gibt es keine Formatstrings mit % als Platzhalter.
-
Machine schrieb:
falsch. es müsste schon
Du hast im folgenden Fall Recht:
#define FORMAT "%s\n" printf( FORMAT, "%%s");
was das gleiche ist wie:
printf("%s\n", "%%s");
heißen, wenn du den gewünschten effekt haben willst :p
Du bist im Unrecht. Das Steuerzeichen % ist nur im Formatsring der printf/scanf Familie von Bedeutung. Alle andere Zeichen außerhalb des Formatstrings werden 1:1 ausgegeben.
-
Hmm, wieso ergießt ihr Euch derart erschöpfend über Format-Strings? Welche Strings was bedeuten und wie das alles funktioniert kann man bis ins Detail im Netz nachlesen. Weniger als 10s Aufwand bei der Google-Suche.
-
Tachyon schrieb:
Hmm, wieso ergießt ihr Euch derart erschöpfend über Format-Strings? Welche Strings was bedeuten und wie das alles funktioniert kann man bis ins Detail im Netz nachlesen. Weniger als 10s Aufwand bei der Google-Suche.
hier ging es schon lange nicht mehr um format strings. hier ging es schlichtweg einfach darum, _wer_ recht hat
-
ui, sorry.. ich hab da grad das % mit dem & verwechselt
-
Machine schrieb:
ui, sorry.. ich hab da grad das % mit dem & verwechselt
% mit & verwehselt? Wo denn? da find ich keinen Zusammenhang
-
supertux schrieb:
Machine schrieb:
ui, sorry.. ich hab da grad das % mit dem & verwechselt
% mit & verwehselt? Wo denn? da find ich keinen Zusammenhang
wenn du in einem string ein & zeichen haben willst, dann musst du zwei & schreiben.
Bsp:
CString foo = _T("Video && Fotoshow"); SetDlgItemText(IDC_ST_FOO, foo);
Da steht dann auf dem Control Video & Fotoshow.
-
Machine schrieb:
supertux schrieb:
Machine schrieb:
ui, sorry.. ich hab da grad das % mit dem & verwechselt
% mit & verwehselt? Wo denn? da find ich keinen Zusammenhang
wenn du in einem string ein & zeichen haben willst, dann musst du zwei & schreiben.
Bsp:
CString foo = _T("Video && Fotoshow"); SetDlgItemText(IDC_ST_FOO, foo);
Da steht dann auf dem Control Video & Fotoshow.
Ja? Also bei mir steht da konkret "Video && Fotoshow".
Hier der Code:#include <stdio.h> #include <stdlib.h> #include <string.h> #define IDC_ST_FOO 0 #define _T(x) x typedef char* CString; typedef unsigned int hokus_pokus_t; void SetDlgItemText(hokus_pokus_t drolf, CString rolf) { (drolf % 2)?printf("%s\n", rolf):printf("%s\n", rolf); } int main() { CString foo = _T("Video && Fotoshow"); SetDlgItemText(IDC_ST_FOO, foo); return 0; }
-
Machine schrieb:
CString foo = _T("Video && Fotoshow"); SetDlgItemText(IDC_ST_FOO, foo);
Da steht dann auf dem Control Video & Fotoshow.
??? und was hat das mit C zu tun? Siehe Tachyons ironische Antwort.
edit: bei GUI Frameworks ist es üblich, dass das Ampersand doppelt vorkommt, wenn man das Zeichen ausgeben will, weil man mit "&Menu" in Menüs/Knöfpe/Formulare/usw das & dazu benutzen kann, um den Buchstaben 'M' zu untertsreichen, damit es so aussieht:
Menu
Das hat aber mit C nichts zu tun (wie ich oben geschrieben hab) sondern das ist eine Eigenheit von GUI Frameworks (eher von dieses _T Makros).
-
supertux schrieb:
??? und was hat das mit C zu tun?
SetDlgItemText ist durchaus eine C-funktion
machste noch:#define char* CString #define _T
... und dann sollte es compilen.
-
fricky schrieb:
supertux schrieb:
??? und was hat das mit C zu tun?
SetDlgItemText ist durchaus eine C-funktion
machste noch:#define char* CString #define _T
... und dann sollte es compilen.
es hat insofern mit C nichts zu tun, weil wenn du das &-Zeichen in einer Zeichenkette ausgeben willst, muss das &-Zeichen nicht doppelt vorkommen. Dass GUI Frameworks etwas anders machen, damit Textbuchstaben unterstrichen erscheinen, ist eine andere Sache und hat nicht viel mit C zu tun.
-
Wer hat den jetzt recht ? -.-