1. 主页
  2. 文档
  3. C语言教程
  4. C语言数组和字符串
  5. char数组的单引号和双引号声明有什么区别?

char数组的单引号和双引号声明有什么区别?

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

#include<stdio.h>
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<stdio.h>
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<stdio.h>
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
这篇文章对您有用吗?