Возникли проблемы при получении переменных GET из URL - PullRequest
0 голосов
/ 09 января 2011

У меня проблемы с этим алгоритмом, чтобы извлечь переменные get из URL и вывести их каждую в новой строке, например:

x=y
z=hello

и т. Д.но вместо этого он печатает на первый взгляд случайный раздел URL без перевода строки в файл.Должна быть какая-то логическая ошибка, но я просто не могу ее обнаружить.

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++;
}

любая помощь оценена.

РЕДАКТИРОВАТЬ:
спасибо всем за ваши комментарииисправил эту ошибку, но безуспешно.Я придумал другой алгоритм, так как я не могу использовать строки c ++ в этой

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

, которые бы меняли каждую из & на новую строку, и тогда я мог бы просто записать var_m в файл, но дляпо какой-то причине это дает мне переполнение буфера.

Ответы [ 2 ]

0 голосов
/ 09 января 2011

ваш учет offset_m и amp_m, похоже, неверен. Возьмем, к примеру, простую строку «a & b & c» - ваш код должен быть выведен из этого текста:

a
b
c

но если вы проследите через код, вы увидите, что когда вы доберетесь до первого &, тогда offset_m=0 и amp_m=1 и вы напечатаете a - это нормально, но когда вы доберетесь до второго & затем offset_m=1 и amp_m=2, которые на самом деле будут печатать &b, и ни в коем случае вы не напечатаете последний элемент.

Использование простого алгоритма разделения строк, такого как предложенный mysqlforums, является обычным способом решения этой задачи, но я считаю, что вы должны быть в состоянии придумать простой алгоритм цикла, который даст вам то, что вам нужно. Подумайте об этом еще раз и попробуйте запустить алгоритм в вашей голове (или с помощью ручки и бумаги), чтобы попытаться понять, как он работает - я уверен, вы его получите!

Если у вас все еще есть проблемы, напишите что-нибудь здесь, и я постараюсь помочь снова.

0 голосов
/ 09 января 2011
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);
    }
}
...