有没有一种方法可以转义C字符串空终止符?

时间:2019-09-07 15:10:18

标签: c

我有一个简单的问题,无法通过谷歌搜索找到答案-是否可以转义C语言的字符串null终止符'\ 0',以便我们可以将其包含在字符串中?

谢谢。

3 个答案:

答案 0 :(得分:3)

请注意,带有嵌入式NUL的“字符串”不再是 string 。您不能安全地将其用作componentDidMount() { ... this.props.navigation.setParams({ removeUser: () => this._deleteUser()}); ... } 中声明的函数的参数,例如

<string.h>

答案 1 :(得分:2)

像这样使用\逃逸\

printf("\\0");

答案 2 :(得分:0)

您可以在字符串中嵌入一个空字符。
但是没有办法转义空字符。

“逃避”某事意味着去除其通常的或特殊的解释,或赋予它一些其他解释。

在 C 字符串和字符常量中,反斜杠字符 \ 赋予其后的字符特殊含义。例如,n 通常是一个普通字母,而 \n 是换行符。 0 通常是普通的数字字符,而 \0 是数值为 0 的字符,是 NUL 或字符串结束字符。

所以如果你写一些类似的东西

char *twostrings = "two\0strings";

您成功地将空字符嵌入到字符串中。但是你没有“转义空字符”——你实际上已经转义了,把它变成一个空字符。

现在,如果你想“转义空字符”——也就是说,去除它作为字符串结束符的特殊含义怎么办?答案是,不,没有办法做到这一点。任何处理字符串的普通 C 函数都总是将空字符视为字符串的结尾。鉴于 twostrings 变量初始化如上,如果你写

printf("%zu\n", strlen(twostrings));

您将得到 3,因为 strlen 停在它找到的第一个空字符处。如果你写

char onestring[10];
strcpy(onestring, twostrings);
printf("%s\n", onestring);

您将得到“一个”,因为 strcpy 停在它找到的第一个空字符处。如果你写,你会得到同样的东西

printf("%s\n", twostrings);

如果你试图通过写来“转义空字符”

twostrings = "two\\0strings";

实际发生的情况是您将转义反斜杠,删除它的特殊含义。您会在字符串中得到一个实际的反斜杠字符和一个实际的 0 字符,根本没有额外的空字符。

另见this question。另见this question,尤其是this answer的第二部分。