我正在查看一些在 Linux 中初始化网络摄像头的源代码,并遇到了以下令人费解的代码行:
struct stat st;
char devName[15] = {0, };
sprintf(devName, "/dev/video%d", deviceIndex);
看起来前导零没有做任何事情:
printf("%s", devName);
返回/dev/video13,其中 13 是设备索引。
前导零有什么作用?如果逗号后面没有任何内容是什么意思? {0, };
最佳答案
这意味着数组 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
是NUL
\0
特点。因此,当您打印数组时,它会打印到最后一个 \0
,就像字符串一样。
关于c - C 字符数组中的空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34683999/