Программка на Си , требуется в строке , все символы одинарной кавычка ' - найти и заменить на такие же кавычки в количестве двух штук , то есть из , например , O'neil O'hara.mp3 , сделать - O''neil O''hara.mp3 . Поясню - это требуется для синтаксиса запросов mysql.
Исходящий буфер должен быть в 2 раза больше входящего. length - размер исходящего
size_t escapeString(char *to, const char *from, size_t length)
{
const char *source = from;
char *target = to;while(length > 0 && *source != '\0'){
switch (*source){
case '\\':
*target++ = '\\';
*target++ = '\\';
break;case '\'':
*target++ = '\'';
*target++ = '\'';
break;default:
*target++ = *source;
break;
}
++source;
--length;
}*target = '\0';
return target - to;
}
>Исходящий буфер должен быть в 2 раза больше входящего....
Не обязательно. Возможно также сэкономить память, проводя сначала анализ строки на предмет выявления заменяемых символов. Если, допустим, нам надо заменить 2 кавычки, то нам потребуется буфер размером на 2 символа больше, чем исходный.
Недостатки метода:
1. На два прохода требуется больше времени, чем на один
2. Трудности с анализом фрагментов - это если исходный буфер содержит не всю строку
Достоинства:
1. Существенная экономия памяти. Если кавычек нет - вообще ничего не надо делать.
2. В первом проходе можно проводить анализ строки на предмет ошибок и второй проход может вообще не понадобиться.
А чем не угодила mysql_real_escape_string?http://dev.mysql.com/doc/refman/4.0/ru/mysql-real-escape-str...
>А чем не угодила mysql_real_escape_string?
>
>http://dev.mysql.com/doc/refman/4.0/ru/mysql-real-escape-str...
не угодила, потому как не понимает всё равно .... даже если после обработки mysql_real_ecape_string, пишет что ошибка синтаксиса.может кто подскажет ... где то в форуме в видел что в пятом мускуле нет проблем скавычками и всяким другим .... подскажите как это делается в пятом .