我想将\0
作为我的C / C ++代码中的数组(char类型)元素之一,但不是最后一个。
我这样做。
char arr[10] ; //array declaration
//initializing the array
arr[0] = 'a' ;
arr[1] = '\0' ;
arr[2] = 's' ;
当我尝试打印这些数组元素时,我得到一些符号内容作为a[1]
的输出。
我猜0被转换为char。是这样吗 ?
如果是的话,在终止之前,我的阵列中是否还有\0
?
答案 0 :(得分:3)
'/0'
不是空字符。转义使用反斜杠:'\0'
。
答案 1 :(得分:3)
您可以在数组中将\0
与其他值相同,并且没关系。
问题是由于两个原因你无法打印它:
它终止了cout
和printf
中的打印,因为他们认为\0
表示字符串的结尾。
\0
不是可打印字符。
因此,您应该编写自己的函数来打印打印出\0
内容的数组,并且在到达时不会终止字符串。 (所以,你应该用别的东西来表示字符串的结尾)
例如:
void print(const std::string &s)
{
for (auto x : s)
std::cout << ((x == '\0')? '.' : x);
}
int main( )
{
std::string s {'a','\0','s'};
print(s);
}
输出:
A.S
它打印一个点而不是那个不可打印的值。
注意:OP也被标记为c++。
答案 2 :(得分:2)
你可以写一个这样的函数:
void print(char *arr, int length){
for(int i = 0; i < length; i++){
if(arr[i] != '\0')
printf("%c",arr[i]);
else
printf("\\0");
}
}
答案 3 :(得分:1)
在('\0'
)数组中有一个char
是完全有效的,但所有标准函数都假定它表示数组的结尾。因此,要打印这样的(非c-)字符串,您需要自己的功能。例如:
void myPuts(size_t length, char * str){
size_t i;
for(i = 0; i < length; i++){
putchar(str[i]);
}
}
并将其称为:
myPuts(10, arr);