strncpy 末尾不会自动加上'\0'

strncpy相对于strcpy来说, 被认为是比较安全的函数, 不会造成目标缓冲区的溢出. 但是该函数不会再目标缓冲区的结尾自动加上字串结束标志符'\0', 需要在程序中手工在结束处置'\0'.


以下为strncpy的说明:

Copies the first num characters of source to destination. If the end of the source C string (which is signaled by a null-character) is found before num characters have been copied, destination is padded with zeros until a total of num characters have been written to it.

No null-character is implicitly appended to the end of destination, so destination will only be null-terminated if the length of the C string in source is less than num.


这是一段用 C 语言写的程序,实现了身份证号码解析的功能。用户输入一个身份证号码,程序会分离出其中的出生年月日和性别信息,然后输出这些信息。 具体实现过程如下: 1. 定义一个叫做 `get_info` 的函数,接收一个字符串参数 `id_num`,表示身份证号码。 2. 在函数内部,定义三个字符数组 `year`、`month`、`day`,分别用来存储出生年、月、日。 3. 调用 `strncpy` 函数,从 `id_num` 字符串中提取出生年、月、日的信息,分别存储到 `year`、`month`、`day` 数组中。比如,`strncpy(year, id_num + 6, 4)` 表示从 `id_num` 的第 7 个字符开始,拷贝 4 个字符到 `year` 数组中。 4. 由于 `strncpy` 函数不会自动在字符串末尾添加结尾符 `\0`,因此需要手动在 `year`、`month`、`day` 数组的末尾添加结尾符。 5. 根据身份证号码的规则,第 17 位表示性别,奇数为男性,偶数为女性。因此,判断 `id_num[16]` 是否为偶数,来确定性别信息。如果是偶数,则性别为女性,用字符 `'F'` 表示;否则,性别为男性,用字符 `'M'` 表示。 6. 最后,调用 `printf` 函数,输出出生年月日和性别信息。 7. 在 `main` 函数中,首先定义一个长度为 19 的字符数组 `id_num`,用来存储用户输入的身份证号码。然后,调用 `scanf` 函数,从标准输入中读取一个字符串,存储到 `id_num` 数组中。 8. 最后,调用 `get_info` 函数,解析身份证号码,并输出相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值