zwei char-arrays vergleichen...
-
ich glaube strcmp ließt nur bis zu einem \n ... lösch die also zuerst ...
-
gibts dazu auch ne einfache funktion
-
strcmp vergleicht die kompletten Strings, deswegen heißt es ja auch strcmp.
Nimm Caipis Lösung:bool adsl_test = strstr(buffer, test) != NULL;
-
ist immer 0, merkwürdig
#ifdef HAVE_CONFIG_H #include <config.h> #endif #include <iostream> #include <cstdlib> #include <stdio.h> #include <string> using namespace std; int main(int argc, char *argv[]) { char buffer[8096]; char *test = "operational";//"initializing(INITIALIZING)"; FILE *eagle; eagle = popen( "eaglestat", "r" ); if(eagle == NULL) { fprintf(stderr,"Konnte keine Pipe zu fglrx erstellen!\n"); exit(0); } /* Read pipe until end of file. End of file indicates that * FILE closed its standard out (probably meaning it * terminated). */ while( !feof( eagle ) ) { if( fgets( buffer, 8096, eagle ) != NULL ); printf( buffer ); } /* Close pipe and print return value of FILE. */ //printf( "\nProcess returned %d\n", pclose( eagle ) ); bool adsl_test = strstr(buffer, test) != NULL; cout<<adsl_test<<endl; return EXIT_SUCCESS; }
-
Arbeite mit std::string und nimm meins. Wir sind hier ja schließlich bei C++ und nicht bei C.
-
ja würde ich machen aber leider gibt mir
string sbuffer = buffer;
nichts aus...):
probier doch mit dem bsp-code aus
-
So müsste es Funktionieren:
#include <iostream> #include <fstream> #include <cstdlib> #include <string> using namespace std; int main(int argc, char *argv[]) { if(argc == 2) { ifstream eagle(argv[1]); if(eagle.is_open()) { string buffer(""), test("operational"), tmpStr; while(getline(eagle, tmpStr)) buffer += tmpStr + '\n'; bool adsl_test = (buffer.find(test) != string::npos); cout << "\n adsl_test: " << adsl_test << endl; } else cout << "\n Datei \'" << argv[1] << "\' konnte nicht zum lesen geoeffnet werden\n"; } else cout << "\n Aufruf: test.exe txt-Datei\n"; return 0; }
Caipi
-
danke caipi... hab jetzt auch ne lsg.
#ifdef HAVE_CONFIG_H #include <config.h> #endif #include <iostream> #include <cstdlib> #include <stdio.h> #include <string> using namespace std; int main(int argc, char *argv[]) { char buffer[8096]; string ready = "operational"; string init = "initializing(INITIALIZING)"; string un_plugged = "Pre-firmware device"; //string working = "Connection seems to be already started!"; string sbuffer; FILE *eaglestat; eaglestat = popen( "eaglestat", "r" ); if(eaglestat == NULL) { fprintf(stderr,"Konnte keine Pipe zum Modem erstellen!\n"); exit(0); } /* Read pipe until end of file. End of file indicates that * FILE closed its standard out (probably meaning it * terminated). */ while( !feof( eaglestat ) ) { if( fgets( buffer, 8096, eaglestat ) != NULL ); sbuffer += buffer; } /* Close pipe and print return value of FILE. */ printf( "\nProcess returned %d\n", pclose( eaglestat ) ); //operrational bool adsl_ready = (sbuffer.find(ready) != string::npos); //initializing bool adsl_init = (sbuffer.find(init) != string::npos); //unplugged bool adsl_nw = (sbuffer.find(un_plugged) != string::npos); //working //bool adsl_working = (sbuffer.find(working) != string::npos); //cout<<adsl_test<<endl; return EXIT_SUCCESS; }
ps: wozu ist eigentlich das
int argc, char *argv[]
in der main funktion da??
-
dotnet schrieb:
ps: wozu ist eigentlich das
int argc, char *argv[]
in der main funktion da??
Das ist sozusagen die Parameterübergabe an die main()-Funktion. D.h. ich übergebe der main()-Funktion direkt aus der Konsole heraus Argumente.
Im Beispiel übergebe ich der main-Funktion als argv[1] (argv[0] ist das Programm bzw. der Programmname selber) den Dateinamen, der zu öffnenden Datei. (Faulheit's halber ;))test.exe die_zu_lesende_datei | | argv[0] argv[1]
Caipi
-
argv[] gibt die Parameter zurück, wobei argv[0] der Dateiname selbst ist und ab argv[1] sind es dann alles Parameter. Das ist klar. Aber woher weiß ich, wieviel Platz indiesem Array vorhanden ist? Letztendlich gibt es ja keine feste Definition von argv[]... Geht das z.B. noch, wenn man 257 Parameter hat? *g*
Soweit ich weiß ist argc die Anzahl der Parameter, komme aber damit irgendwie ned so richtig zurecht ^^"
-
Die maximale Anzahl der comandozeileparameter ist festgelegt aber IMHO OS-abhängig.
Argc (argumentcount) ist wie schon gesagt wurde die anzahl der parameter die übergeben wurde. Wenn also keine parameter angegeben werden ist argc==1, da argv[0] immer der programmname sein sollte. Du hast also immer argc-1 "echte" parameter.Um auf die ("echten")parameter zuzugreifen verwendest du einen integer oder auch ne constante n mit 0 < n <= argc als index in das argv-array;
argv[1]; //erster parameter argv[254]; //254ster parameter
sofar