我正在浏览一些用于在Linux中初始化网络摄像头的源代码,并遇到了以下令人费解的代码:
struct stat st;
char devName[15] = {0, };
sprintf(devName, "/dev/video%d", deviceIndex);
似乎领先的零没有做任何事情:
printf("%s", devName);
返回/ dev / video13,其中13是deviceIndex。
领先的零做什么?如果逗号后面没有任何内容,这意味着什么? {0, };
答案 0 :(得分:3)
这意味着数组devName
将填充0
s。
具有缺失值的数组将初始化为0:
int devName[10] = { 1, 2 }; // initialize to 1,2,0,0,0...
这适用于所有类型的数组,无论是char
还是int
。
<小时/> 首先使用
sprintf(devName, "/dev/video%d", deviceIndex);
。这将使用字符串devName
覆盖数组/dev/video13
,假设为deviceIndex = 13
。但那些只有12 char
。其余的3
仍然有\0
。
你的数组是一个char
数组。 ascii值为0
的char是NUL
\0
个字符。因此,当您打印数组时,它会打印到最后\0
,就像字符串一样。