LINUX.ORG.RU

C / html->pain text


0

1

Привет всем,

Если ли ну нас какая-нибудь библиотека или функция на С, которая может преобразовать буфер с юникодным html в обычный текст? Ну то есть из этого: buf=«%D0%9E%D1%82%D0%B2%D0%B5%D1%82%3A%20Hello» Cделать: buf_unencoded=«Привет: Hello»

Что-то мне подсказывает что это класический случай и такого должно быть валом.


Ответ на: комментарий от Eddy_Em

> Боюсь, своя альтернатива будет еще дырявее.

Да бросьте нас пугать. Простейшей альтернативой может быть:

[code] void safe_strncpy(char* dst, const char* src, size_t n) { strncpy(dst, src, n-1); dst[n-1] = '\0'; } [/code]

Поэтому лучше уж буду пользоваться тем, что есть.

Пожалуйста, только сначала научитесь этими средствами пользоваться.

anonymous
()
Ответ на: комментарий от Eddy_Em

> С++ нужен только там, где его имеет смысл использовать.

Чтобы принимать решение об использовании С++ надо хотя бы его знать. А вы с этим языком знакомы только с чужих слов.

А когда человек от незнания начинает городить всякие «хеллоуворлды» на плюсах, вместо того, чтобы использовать более подходящий язык, это смешно!

Именно «хеллоуворлдами» вы и занимаетесь. Вам ведь уже неоднократно рекомендовали на лоре попробовать осилить что-нибудь кроме языка Си, а вы все равно не хотите.

anonymous
()
Ответ на: комментарий от sn1ln

Все потому, что сваял «на скорую руку»:

char *outp, *buf = calloc(...
outp = buf;
...
return buf;

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

Вам ведь уже неоднократно рекомендовали на лоре попробовать осилить что-нибудь кроме языка Си, а вы все равно не хотите.

Зачем? Мне хотя бы в Си для начала разобраться. Тем более, что это - базовый язык :)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

> Ну, такая же, как и при использовании всяких strdup :)

Нет, ты забыл tmp удалить (при использовании всякого strdup) внутри своей функции.

anonymous
()
Ответ на: комментарий от anonymous

Точно. Значит, добавляем еще одну временную переменную (указывающую на начало tmp):

...
char *tptr, ...
tmp = strdup(inp);
tptr = tmp;
...
if(tptr) free(tptr);
...

// А что вы все из-под анонима пишете?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em
if(tptr) free(tptr);

The free() function frees the memory space pointed to by ptr, which must have been returned by a previous call to malloc(), calloc() or realloc(). Otherwise, or if free(ptr) has already been called before, undefined behavior occurs. If ptr is NULL, no operation is performed.

Кроме того, как ты себе представляешь ситуацию, в которой tptr равен NULL? Я вижу только возможность того, что strdup вернет NULL, но в таком случае tmp у тебя тоже будет NULL, и программа твоя упадет еще на strtok(tmp, «%»).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.