我有一个简单的问题,无法通过谷歌搜索找到答案-是否可以转义C语言的字符串null终止符'\ 0',以便我们可以将其包含在字符串中?
谢谢。
答案 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的第二部分。