繁体   English   中英

array [index] = 0;的目的是什么?

[英]What is the purpose of array[index] = 0;?

char dev[20] = "dev_name";
char dest[32];
strncpy(dest,dev,sizeof(dev));
dest[sizeof(dev)-1] = 0;

dest[sizeof(dev)-1] = 0; 手段?

这是否意味着该数组的所有元素都分配了零?

不,这并不意味着这个。

假设您的意思是strncpy(dest,dev_name,sizeof(dev_name)); /* Extra bracket */ strncpy(dest,dev_name,sizeof(dev_name)); /* Extra bracket */以及最后一行中的dev_namesizeof 您将NUL字符分配给最后一个以标记名称数组的结尾。

当您编写类似“ foo”的字符串文字时,编译器会自动将其以NUL终止。 当您使用自己的数组时,有时需要手动标记字符串的结尾。

来自man strncpy

除了最多复制n个src字节外,strncpy()函数与之类似。 警告:如果src的前n个字节中没有空字节,则放置在dest中的字符串将不会以空终止

明确地,在代码片段中添加了空终止符来处理警告情况。

dev_name[0]dev_name[1]dev_name[2]等是您字符串的第一个,第二个,第三个...字符。 假设设备名称少于31个字符,则在strncpy之后它将自动NUL终止,并且您无需执行任何操作。

如果名称正好有31字符,则最后一个字符(32 nd )已经为'\\0' (ASCII代码0),并在其上再次写入0不会有任何区别。

如果名称包含超过31字符(大写),则最后一个字符不是NUL且dev_name[sizeof(dev_name)-1] = 0; 将使名称NUL终止。

在您的代码中,假设size类似于sizeof

 dev_name[size(dec_name)-1] = 0;

dev_name[size(dec_name)-1]指向数组的最后一个元素,请记住C数组使用基于0的索引。

然后,根据定义,c中的字符串是一个 null终止的char数组,因此,如果要将char数组用作string ,则必须具有null终止。

0NULASCII值null 因此,从本质上讲,您正在将一个空终止符放入char数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM