C++ - char数组和空字符

Ale*_*Dan 3 c++ arrays chat null-character

我有两个关于char数组的问题.

  1. 从下面的代码开始,既然arrconst,为什么编译器没有给我一个错误,因为我正在重写它?

    char arr[5]; // arr is a const pointer to (*)[5] array
    cin>>arr; //   
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当我初始化一个这样的char数组时:

    char arr[5]={'h','i'};
    
    Run Code Online (Sandbox Code Playgroud)

    如果我这样做:

    cout << arr << "something here \n"; 
    
    Run Code Online (Sandbox Code Playgroud)

    它会打印出来hisomething here.我以为它应该打印出来

    hi   something here
    
    Run Code Online (Sandbox Code Playgroud)

    有3个witespaces.

    但如果我这样做:

    for(int i = 0; i < 5; i++){
      cout << arr[i];
    }
    
    Run Code Online (Sandbox Code Playgroud)

    打印出3个空格.

第二种情况似乎证明编译器不添加任何空字符.那么编译器如何忽略3个空格呢?

Raf*_*cki 8

  1. 这个数组不是const,因为没有const限定符.
  2. 如果未在初始值设定项列表中指定剩余值,则会将它们初始化为0.0用于终止C字符串,而不是空格.

至于你的索赔,那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;
}
Run Code Online (Sandbox Code Playgroud)

打印:

hiX
Run Code Online (Sandbox Code Playgroud)

和hexdumped:

$ ./t | hexdump -Cv
00000000  68 69 00 00 00 58 0a                              |hi...X.|
00000007
Run Code Online (Sandbox Code Playgroud)

'\0'印有字符.它们的显示似乎取决于操作系统.但它们不是空白.