C Primer Plus学习 二十九 string.h strncat()函数

本文介绍了一个C语言程序示例,该程序演示了如何安全地使用strcat和strncat函数来连接两个字符串,并检查第一个字符串的大小以避免缓冲区溢出。通过计算可用空间并限制追加的字符数量,确保了字符串操作的安全性。
摘要由CSDN通过智能技术生成

        strcat()函数并不检查第一个数组是否能够容纳第二个字符串。如果没有为第一个数组分配足够大的空间,多出来的字符溢出到相邻存储单元时就会出现问题。当然,为第一个 数组分配足够大的空间后再使用strlen ()函数。注意,应该给组合串的长度加1以用来存放空字符。您也可以使用stncat()函数,这个函数需要另一个参数来指明最多允许添加的字符的数目。例如,strncat(bugs, addon, 13)函数把addon字符串中的内容添加到bugs上,直到加到13个字符或遇到空字符为止,由二者中先符合的那一个来终止添加过程。因此,把空字符算在内(两种情况下都要添加空字符),bugs数组应该足够大,以存放原始字符串(不包括空字符)、增加的最多13个字符和结束的空字符。程序清单11.15 使用这一知识来计算available变量值,这个值被用作最多允许添加的字符数。

///* jc>in_chk.c --连接两个字符串,并检査第一个字符串的大小
#include<stdio.h>
#include<string.h>
#define SIZE 30
#define BUGSIZE 13
int main(void)
{
char flower[SIZE];
char addon[]="s sell like old shoes,";
char bug[BUGSIZE];
int available;

puts("What is your favoite flowers.");
gets(flower);
if((strlen(addon)+strlen(flower)+1)<=SIZE)
    strcat(flower,addon);
puts(flower);
    puts("What is your favorite bug?");
    gets(bug);
    available=BUGSIZE-strlen(bug)-1;
    strncat(bug,addon,available);
    puts(bug);
    
    return 0;


}
下面是一个运行示例:
What is your favorite flower?
Rose
Roses smell like old shoes.
What is your favorite bug?
Aphid
Aphids smell



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值