使用“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?
由于
答案 0 :(得分:8)
strlen()
计算字符串中的字节数,它不关心包含的字节是否表示UTF-8编码的Unicode字符。因此,例如,包含UTF-8编码“aöü”的字符串的strlen()
将返回5
,因为该字符串被编码为"a\xc3\xb6\xc3\xbc"
。
答案 1 :(得分:2)
strlen
计算字符串中的字节数(直到终止NUL),而不是UTF-8字符的数量,因此stringlength
应该已经满足您的需求。< / p>