Strings addieren
lima-city → Forum → Programmiersprachen → C/C++ und D
aba
abort
anscheinend
antwort
bescheuerten fehler
compiler
first
folgende meldung
hilfe
kundennummer
main
nutzen
operator
pa
string
verlegenheit
vorname
-
Hi Leute,
ich brauche Eure Hilfe .
Ich muss Strings und andere Werte kopieren unter C++, aber anscheinend gibt es nur was wirklich brauchbares unter C... also habe ich versucht snprintf bzw sprintf zu nutzen.
Hier der Code:
char logstring[250];
snprintf(logstring, 250, "%s %s", Vorname, Nachname);
oder mit sprintf:
char logstring[250];
snprintf(logstring, "%s %s", Vorname, Nachname);
Man kann es zwar kompilieren ab es st?rtzt dann ab sobald man dorthin kommt, der Compiler gibt mir folgende Meldung dar?ber:
[Warning] cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime
Weiss jemand was er da von mir will, bzw wie ich diesen bescheuerten Fehler weg bekomme?
Danke schon mal im vorraus f?r jede Antwort
LG Szandor -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich muss Strings und andere Werte kopieren unter C++, aber anscheinend gibt es nur was wirklich brauchbares unter C...
Es gibt bspw. :
basic_string::append
basic_string::copy
angewand zB so:
#include <string>
#include <iostream>
int main( )
{
using namespace std;
// The first member function
// appending a C-string to a string
string str1a ( "Hello " );
cout << "The original string str1 is: " << str1a << endl;
const char *cstr1a = "Out There ";
cout << "The C-string cstr1a is: " << cstr1a << endl;
str1a.append ( cstr1a );
cout << "Appending the C-string cstr1a to string str1 gives: "
<< str1a << "." << endl << endl;
return 0;
}
Fehler/Warnung entsteht vermutlich, weil du String-Objekte(Vorname und Nachname) f?r die sprintf/snprintf-Funktion benutzt. Stattdessen m?sste es folgendermassen lauten:
sprintf(logstring,"%s %s",Vorname.c_str(),Nachname.c_str());
Bitte im nachhinein ;)
Talpa -
Danke Talpa
Das funktioniert ja pr?chtig. Das mit dem append ist wohl eher nur f?r Strings(habs ausprobiert, vielleicht probiere ich auch damit jetzt ein bissl rum), aber ich habe auch einen long Werte zum einf?gen(Kundennummer).
Aber das eine beispiel was du ausgebessert hast:
sprintf(logstring,"%s %s",Vorname.c_str(),Nachname.c_str());
funktioniert einwandfrei, kein absturtz mehr :).
Nun habe ich das mit dem kompletten Kommando probiert, dort geht das nicht ganz so einfach:
snprintf(logstring, 250, "angelegt: %l, %s, %s, %s.", Kundennummer, Vorname.c_str(), Nachname.c_str(), (vorhanden==1?" editiert":" hinzugef?gt"));
Es kommt zwar GAR KEINE FEHLERMELDUNG, aber es st?rtzt dennoch ab :(...
Auch wenn man das: "(vorhanden==1?" editiert":" hinzugef?gt")" wegnimmt st?rtzt es ab, also vermutlich liegt das an dem long Wert!?
Woher hast du denn die infos mit dem c_str()? Ich habe einiges ?ber snprintf gefunden, aber von dem c_str() nichts!? Aufjedenfall funktioniert es so schon mal, nur der Long-Wert macht noch einige Probleme .
Weisst du vielleicht auch da einen Ausweg?
EDIT:
OK, habe es jetzt gel?st!
sprintf(logstring, "angelegt: %i, %s, %s, %s.\0", Kundennummer, Vorname.c_str(), Nachname.c_str(), (vorhanden==1?"editiert":"hinzugef?gt"));
habe einfach nur mehr das %l mit %i tauschen m?ssen und tada nun funktioniert es ganz wie es soll
Also danke nochmal f?r deinen .c_str() Tip, ohne den h?tte ich das nicht so einfach geschafft! :) Trotzdem w?rde ich noch gerne wissen woher du diese Info hast, vielleicht kennst du ja eine gute Seite f?r solche Dinge!?
LG Szandor -
Hi Szandor,
schon der gute Stroustrup schrieb:
Whenever possible, "C style strings" are best avoided in favor of s t r i n g s. Cstyle strings and their associated standard functions can be used to produce very efficient code, but even experienced C and C++ programmers are prone to make uncaught ??silly errors?? when using them. However, no C++ programmer can avoid seeing some of these functions in old code.
The C++ Programming Language, Third Edition by Bjarne Stroustrup.
?brigens ein gutes Buch um "solche Dinge" mal nachzuschlagen...Eine gute Seite f?r sowas kenn ich leider nicht.
D.h. statt sprintf/snprintf zu nutzen, solltest du vielleicht auf Streams zur?ckgreifen. Zum Beispiel so:
#include <string>
#include <iostream>
#include <sstream>
int main(){
string logstring,Vorname...;
int Kundennummer;
ostringstream os;
...
os << Kundennummer << " " << Vorname ....;
logstring = os.str();
}
Dann kommst du gar nicht in die Verlegenheit nullterminierte Strings("C-style strings") nutzen zu m?ssen.
Weiterhin fr?hliches Programmieren
Talpa -
hi,
soviel ich weiss, kannst du auch einfach "+" nutzen
like
cout << "irgendein text" + strVariable + "noch mal text"; -
das w?re m?glich, aber manchmal gibt es damit Schwierigkeiten, da dieses Operatoren auch als bin?re vorhanden sind
du solltest besser
string str = "String: " str1 + str2;
cout << str;
-
xhochy schrieb:
...manchmal gibt es damit Schwierigkeiten, da dieses Operatoren auch als bin?re vorhanden sind
du k?nntest den + operator aba auch ?berladen um ganz sicha zu gehn... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage