Umgebungsvariable einlesen, bestimmte Stelle suchen und zerlegen
-
Hallo Zusammen,
ich möchte die Umgebungsvariable QUERY_STRING einlesen, und diese zerlegen.
Das heißt ich suche zuerst nach dem Variablennamen der in der Variablen steht und speicher die Anfangspositon in einer Variablen ab, daraufhin suche ich nach den Trennzeichen '&' und '='. Diese trennen jeweils Variablenname und den dazugehörigen Wert.Bisher habe ich folgenden Code:
std::string Umgebungsvariable=getenv("QUERY_STRING"); std::string sUmgebungsvariable; char *CheckVariable="Nachname="; char *Trennzeichen1="="; char *Trennzeichen2="&"; char *stelle; string Wert; int position; int position1; int position2; int groeße; stelle = strstr(Umgebungsvariable.c_str(),CheckVariable); position= stelle-Umgebungsvariable.c_str()+1; if (stelle != NULL) { stelle=strstr(Umgebungsvariable.c_str(), Trennzeichen1); position1=stelle-Umgebungsvariable.c_str()+1; stelle=strstr(Umgebungsvariable.c_str(), Trennzeichen2); position2=stelle-Umgebungsvariable.c_str(); groeße=position2 - position1; sUmgebungsvariable = Umgebungsvariable; Wert = sUmgebungsvariable.substr(position1,groeße); fopen_s(&cLogFile,"./AZeit.log","a"); fprintf(cLogFile, "%s\n",Wert); fclose(cLogFile); }Ich weiß noch nicht genau ob das ganze so funtkionieren würde, als ich es gerade testen wollte bekam ich aber 3 Fehlermeldungen:
1>c:\test\test\app.cpp(42) : error C2440: '=': 'const char *' kann nicht in 'char *' konvertiert werden 1> Durch die Konvertierung gehen Qualifizierer verloren 1>c:\test\test\app.cpp(47) : error C2440: '=': 'const char *' kann nicht in 'char *' konvertiert werden 1> Durch die Konvertierung gehen Qualifizierer verloren 1>c:\test\test\app.cpp(49) : error C2440: '=': 'const char *' kann nicht in 'char *' konvertiert werden 1> Durch die Konvertierung gehen Qualifizierer verlorenWas mache ich falsch? Liegt es an c_str()?
Hoffe jemand kann mir (mit einem kleinen Beispiel) weiterhelfen.Mit freundlichen Grüßen
Everready
-
Dein Fehler ist, dass du C mit C++ mischt. Entfern die "char*" und nutze std::string.
-
Und
findstattstrstr
-
Hallo,
ertsmal danke für die beiden sehr schnellen Antworten...

Ich habe den Code nun folgendermaßen abgeändert:std::string Umgebungsvariable=getenv("QUERY_STRING"); std::string CheckVariable="Nachname="; std::string Trennzeichen1="="; std::string Trennzeichen2="&"; int stelle; string Wert; int position; int position1; int position2; int groeße; stelle = Umgebungsvariable.find(CheckVariable); if (stelle != string::npos) { stelle=Umgebungsvariable.find(Trennzeichen1); position1=stelle; stelle=Umgebungsvariable.find(Trennzeichen2); position2=stelle; groeße=position2 - position1; Wert = Umgebungsvariable.substr(position1,groeße); fopen_s(&cLogFile,"./AZeit.log","a"); fprintf(cLogFile, "%s\n",Wert); fclose(cLogFile); }Allerdings erhalte ich nun folgendes Fehlerfenster, wenn ich das Programm compilieren möchte:
Debug Asserrtion Failed!
Programm: c:\test\Debug\app.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\xstring
Line: 1094
Expression: invalid null pointerKann mir jemand sagen wo hier der Fehler steckt?
Mit freundlcihen Grüßen
Everready
-
Everready schrieb:
fopen_s(&cLogFile,"./AZeit.log","a"); fprintf(cLogFile, "%s\n",Wert); fclose(cLogFile); }Und jetzt hörst du auf C und C++ zu mischen, und benutzt die Streams aus der Standardbibliothek.
fpritnf ist nicht typsicher. Mit dem Formatwert %s sagst du an, du übergibst einen C-String. C-Strings sind Char-Pointer. Du übergibst jedoch einen völlig anderen Typ, einen std::string.
-
Everready schrieb:
Kann mir jemand sagen wo hier der Fehler steckt?
Der Debugger kann das.
Vielleicht liefertgetenv("QUERY_STRING")NULL zurück. Vielleicht aber auch nicht.