c中的utf8字符串和malloc

时间:2011-10-09 20:10:39

标签: c unicode utf-8 malloc

使用“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 个答案:

答案 0 :(得分:8)

strlen()计算字符串中的字节数,它不关心包含的字节是否表示UTF-8编码的Unicode字符。因此,例如,包含UTF-8编码“aöü”的字符串的strlen()将返回5,因为该字符串被编码为"a\xc3\xb6\xc3\xbc"

答案 1 :(得分:2)

strlen计算字符串中的字节数(直到终止NUL),而不是UTF-8字符的数量,因此stringlength应该已经满足您的需求。< / p>