c - C 字符数组中的空元素

标签 c arrays

我正在查看一些在 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...

这适用于所有类型的数组,无论是 charint .

<小时/> 首先你使用sprintf(devName, "/dev/video%d", deviceIndex); 。这将覆盖数组 devName与字符串 /dev/video13 ,假设deviceIndex = 13 。但这些只有 12 char 。其余3还有\0 .

你的数组是 char大批。具有 ascii 值的字符 0NUL \0特点。因此,当您打印数组时,它会打印到最后一个 \0 ,就像字符串一样。

关于c - C 字符数组中的空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34683999/

相关文章:

c++ - 是否有用于检测 USB 过流的 Windows API?

c - 如何在编译时在依赖文件中添加用户定义的依赖项

java - 与 ArrayAdapter 作斗争

arrays - 在数组内移动数组元素

javascript - 如何将 Javascript 字符串转换为八位字节/字符数组?

c - 当程序未链接到 pthreads 库时,为什么 pthread_mutex_lock 总是返回 0(但没有错误)?

c - OBJECT_ATTRIBUTE 结构中的 ObjectName(parameter) 指的是什么?

c - 将结构添加到列表期间出现 Nullptr 错误

php - 如何在 php 中传递数组中的对象?

Java :How Generic Erasure Works