[英]C++ - char array and the null character
我有两个关于char数组的问题。
从下面的代码,因为arr
是const
,为什么编译器不会给我一个错误,因为我正在重写它?
char arr[5]; // arr is a const pointer to (*)[5] array cin>>arr; //
当我初始化一个这样的char数组时:
char arr[5]={'h','i'};
如果我这样做:
cout << arr << "something here \\n";
它会hisomething here
打印hisomething here
。 我以为它应该打印出来
hi something here
有3个witespaces。
但如果我这样做:
for(int i = 0; i < 5; i++){ cout << arr[i]; }
它会打印出3个空格。
第二种情况似乎证明编译器不添加任何空字符。 那么编译器如何忽略3个空格呢?
const
,因为没有const
限定符。 0
。 0
用于终止C字符串,而不是空格。 至于你的主张,那个for(int i=0;i<5;i++){ cout << arr[i]; }
for(int i=0;i<5;i++){ cout << arr[i]; }
打印空白-你是怎么检查的?
为了我:
#include <iostream>
int main(){
char arr[5]={'h','i'};
for(int i=0;i<5;i++){ std::cout << arr[i]; }
std::cout << "X" << std::endl;
}
打印:
hiX
和hexdumped:
$ ./t | hexdump -Cv
00000000 68 69 00 00 00 58 0a |hi...X.|
00000007
打印了'\\0'
字符。 它们的显示似乎取决于操作系统。 但它们不是空白。
而“const char *”或“char const *”表示指向的左值不能改变,而“char * const”表示指针左值本身不能改变。 但这与你的问题无关。
数组只是一个数组:
char a[5]; //a's type is char[5];
但是数组很难成为操作数。 只有运算符我记得接受数组类型是sizeof和&(地址)(另一方面,这意味着有时必须是一个数组。否则如果你写sizeof(a),它会给你大小一个指针。) 对于其他操作,a转换为char * rvalue。 是的,即使你写一个[0],一个[1]等,a [0]相当于*(a + 0),它对指针进行操作但不对数组进行操作。
当你无法分配某些东西时,它并不总是意味着东西是“const”:
arr作为const指针,这意味着您不能将指针设置为另一个地址。 它不是指向const的指针,因此您可以更改指针指向的地址处的数据。
例:
arr=&another_variable; //Illegal
*arr='A'; //Legal
你不应该使用char类型,尝试使用字符串而不是char数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.