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