2011-01-08 9 views
0

Ich bin mit diesem Algorithmus Probleme, um die von einer URL erhalten Variablen zu extrahieren und wie sie sich auf einer neuen Zeile drucken:Probleme bekommen GET-Variablen von url

x=y 
z=hello 

usw., sondern druckt es ein scheinbar zufälliger Abschnitt der URL ohne Zeilenumbrüche für die Datei. Es muss einen logischen Fehler geben, aber ich kann es einfach nicht erkennen.

for(i_m=0;i_m<len_m;i_m++) { 

if(var_m[i_m]=='&') { 
    fwrite(var_m+offset_m, 1, amp_m, echo_out); 
    fputc('\n',echo_out); 
    offset_m+=amp_m; 
    amp_m=0; 
} 

amp_m++; 
} 

jede Hilfe geschätzt.

EDIT:
vielen Dank für Ihre Kommentare, korrigierte ich diesen Fehler Guss aber vergeblich. Ich dachte, einen anderen Algorithmus auf, da ich nicht C++ Strings in diesem

while((i_m=(strchr(var_m,'&')-var_m))>0) { 
    var_m[i_m]='\n'; 
} 

, die jede der & würde sich ändern, um eine neue Zeile verwenden, und dann konnte ich nur var_m in die Datei schreiben, aber aus irgendeinem Grund Das gibt mir einen Pufferüberlauf.

+0

Können Sie bitte Ihren Code mehr kommentieren? Wenn Ihr Code nicht funktioniert und es keine Kommentare gibt, die erklären, was die Variablen sind oder was die allgemeine Idee ist, dann kann es sehr schwer sein, den Fehler zu erkennen. Ist es ein logischer Fehler (der Algorithmus flat-out funktioniert nicht) oder ein Programmierfehler (Sie haben Ihr Design nicht korrekt codiert)? – templatetypedef

Antwort

0
void StringExplode(std::string &str, const std::string &separator, std::vector<string>* results){ 
    int found; 
    found = str.find_first_of(separator); 
    while(found != string::npos){ 
     if(found > 0){ 
      results->push_back(str.substr(0,found)); 
     } 
     str = str.substr(found+1); 
     found = str.find_first_of(separator); 
    } 
    if(str.length() > 0){ 
     results->push_back(str); 
    } 
} 
+0

'StringExplode (" a, b ",", ", 0)' bang, du bist tot. Verwenden Sie eine Referenz, keinen Zeiger. – GManNickG

+0

Std :: Vektor x; StringExplode ("a, b", ",", &x); – mysqlforums

+0

) Ich bin mir bewusst, wie es verwendet werden soll. Ich sage, dass Sie keine Prüfungen für Null haben, und dass so etwas überhaupt nicht notwendig ist machen Sie einfach den Parameter zu einer Referenz, Sie vereinfachen nicht nur die Verwendung innerhalb und außerhalb der Funktion, Sie sind garantiert, dass Sie keine Probleme haben werden. – GManNickG

0

Ihre Buchhaltung von offset_m und amp_m scheint falsch zu sein. Nehmen Sie zum Beispiel die einfache Zeichenfolge „ein & b & c“ - Ihr Code sollte, dass der Text outputed aus haben:

a 
b 
c 

aber wenn Sie den Code Trace durch, werden Sie sehen, dass, wenn Sie dann zum ersten & erhalten offset_m=0 und amp_m=1 und Sie würden a drucken - das ist in Ordnung, aber wenn Sie zu der zweiten & dann offset_m=1 und amp_m=2, die tatsächlich &b drucken würde und zu keinem Zeitpunkt würden Sie das letzte Element drucken.

Die Verwendung eines einfachen String-Splitting-Algorithmus wie mysqlforums vorgeschlagen ist eine gängige Methode, um diese Aufgabe zu bewältigen, aber ich glaube, Sie sollten in der Lage sein, mit einem einfachen Loop-Algorithmus zu bekommen, was Sie brauchen. Denken Sie noch einmal darüber nach und versuchen Sie, den Algorithmus in Ihrem Kopf zu durchlaufen (oder verwenden Sie Stift und Papier), um zu versuchen, zu verstehen, wie es funktioniert - ich bin mir sicher, dass Sie es bekommen werden!

Wenn Sie immer noch Probleme haben, posten Sie etwas hier und ich werde versuchen, wieder zu helfen.