【发布时间】:2014-09-06 04:46:10
【问题描述】:
假设我有一些 utf8 编码的字符串。在其中,单词使用";" 分隔。
但是这个字符串中的每个字符(";" 除外)都有 utf8 值 >128。
假设我将此字符串存储在 unsigned char 数组中:
unsigned char buff[]="someutf8string;separated;with;";
将这个buff 传递给strtok 函数是否安全? (如果我只想使用";" 符号提取单词)。
我担心strtok(或strcpy)期望char指针,但在我的
字符串某些值的值 > 128。
那么这种行为是否已定义?
【问题讨论】:
-
strtok是独立于语言环境的,所以它不应该有任何你想要的问题。 -
@AntonH:是的,但是例如 strcpy 呢?
-
strcpy查找空终止符,并且 UTF-8 编码没有 0 字符,AFAIK。所以这也应该不是问题。但是,如果您愿意,请稍等一下,其他人会过来确认或反驳我所说的。这里有一些信息:java-samples.com/showtutorial.php?tutorialid=806 -
UTF-8 确实有一个 0 字符 - 与 ASCII 相同的 0 字符,因为 ASCII 是 UTF-8 的子集 - Unicode
U+0000,编码为字节八位字节0x00就像在 ASCII 中一样。 -
@AntonH:空字节是U+0000的UTF-8编码。它确实有,但它的目的没有改变,所以大多数寻找零字节的字符串函数都可以使用 UTF-8(并且空字节永远不会在 UTF-8 中作为另一个字符的一部分出现)。