在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基础课程》。