Строки utf8 и malloc в c - PullRequest
       2

Строки utf8 и malloc в c

3 голосов
/ 10 октября 2011

С "opendir" и "readdir" я читаю содержимое каталогов.Во время этого процесса я выполняю некоторые манипуляции / распределение строк: что-то вроде этого:

int stringlength = strlen(cur_dir)+strlen(ep->d_name)+2;
char *file_with_path = xmalloc(stringlength); //xmalloc is a malloc wrapper with some tests (like no more memory)
snprintf (file_with_path, (size_t)stringlength, "%s/%s", cur_dir, ep->d_name);

Но что, если строка содержит двухбайтовый символ utf8?Как вы решаете эту проблему?

stringlength*2?

Спасибо

Ответы [ 2 ]

8 голосов
/ 10 октября 2011

strlen() считает байты в строке, не имеет значения, представляют ли содержащиеся в них байты символы Unicode в кодировке UTF-8.Так, например, strlen() строки, содержащей кодировку UTF-8 «aöü», вернет 5, поскольку строка закодирована как "a\xc3\xb6\xc3\xbc".

2 голосов
/ 10 октября 2011

strlen считает количество байтов в строке (до завершающего NUL), а не количество символов UTF-8, поэтому stringlength должно быть уже настолько большим, насколько вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...