📌  相关文章
📜  char数组的单引号和双引号声明有什么区别?

📅  最后修改于: 2021-05-25 22:25:31             🧑  作者: Mango

在C / C++中,当用双引号引起来的字符串初始化字符数组且未指定数组大小时,编译器会自动为字符串终止符’\ 0’分配一个额外的空间。例如,以下程序将6打印为输出。

#include
int main()
{
  // size of arr[] is 6 as it is '\0' terminated 
  char arr[] = "geeks";
  
  printf("%lu", sizeof(arr));
  
  return 0;
}

输出 :

6

如果在上述程序中将数组大小指定为5,则该程序将运行而不会出现任何警告/错误,并在C中打印5,但在C++中会导致编译错误。

// Works in C, but compilation error in C++
#include
int main()
{
  // arr[] is not terminated with '\0'
  // and its size is 5
  char arr[5] = "geeks"; 
    
  printf("%lu", sizeof(arr));
    
  return 0;
}

输出 :

5

当字符阵列与逗号初始化分隔的字符列表和未指定数组大小,编译器不创建字符串结束额外的空间“\ 0”。例如,以下程序打印5。

#include
int main()
{
  // arr[] is not terminated with '\0' 
  // and its size is 5 
  char arr[]= {'g', 'e', 'e', 'k', 's'}; 
  
  printf("%lu", sizeof(arr));
  
  return 0;
}

输出 :

5
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。