C HDIO\U GET\U IDENTITY hd\U driveid.serial\U no未以nul终止?

C HDIO\U GET\U IDENTITY hd\U driveid.serial\U no未以nul终止?,c,linux,C,Linux,我正在使用HDIO_GET_IDENTITY获取HDD序列号 ioctl用所有信息填充struct hd_driveid结构 但正如我看到的,串行_no字符串不是nul终止的: (gdb) p hd.serial_no $4 = ' ' <repeats 12 times>, "Z4Y5M5RZ" (gdb) p hd.serial_no[17] $5 = 53 '5' (gdb) p hd.serial_no[18] $6 = 82 'R' (gdb) p hd

我正在使用HDIO_GET_IDENTITY获取HDD序列号 ioctl用所有信息填充struct hd_driveid结构

但正如我看到的,串行_no字符串不是nul终止的:

(gdb) p hd.serial_no
$4 = ' ' <repeats 12 times>, "Z4Y5M5RZ"
(gdb) p hd.serial_no[17]
$5 = 53 '5'
(gdb) p hd.serial_no[18]
$6 = 82 'R'
(gdb) p hd.serial_no[19]  (this should be the last byte)
$7 = 90 'Z'
(gdb) 
但在buf_类型不为零的情况下,可能会发生溢出

甚至更多。当序列号被短接时,它的前缀是空格,而不是在末尾有nul字节(这很烦人,因为我必须修剪空格),这样它就保证没有nul终止符(除了下一个成员buf_type,当为零时)

这是HDIO_GET_IDENTITY中的错误吗?我们希望C中的字符串以nul结尾,并且能够从中进行strcpy

unsigned char   serial_no[20];  /* 0 = not_specified */
unsigned short  buf_type;   /* Retired */