预计阅读本页时间:-
说 明
ANSI之前的一些系统使用strings. h而不是string. h,还有一些系统可能根本就没有字符串头文件。
11.5.2 strcat()函数
strcat() (代表string concatenation)函数接受两个字符串参数。它将第二个字符串的一份拷贝添加到第一个字符串的结尾,从而使第一个字符串成为一个新的组合字符串,第二个字符串并没有改变。strcat()函数是char*(指向char的指针)类型。这个函数返回它的第一个参数的值,即其后添加了第二个字符串的那个字符串中第一个字符的地址。
程序清单11.14举例说明了strcat()的功能。
程序清单11.14 str_cat.c程序
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
输出如下:
11.5.3 strncat()函数
strcat()函数并不检查第一个数组是否能够容纳第二个字符串。如果没有为第一个数组分配足够大的空间,多出来的字符溢出到相邻存储单元时就会出现问题。当然,可以像程序清单11. 15那样,为第一个数组分配足够大的空间后再使用strlen()函数。注意,应该给组合串的长度加1以用来存放空字符。您也可以使用strncat()函数,这个函数需要另一个参数来指明最多允许添加的字符的数目。例如,strncat(bugs, addon, 13)函数把addon字符串中的内容添加到bugs上,直到加到13个字符或遇到空字符为止,由二者中先符合的那一个来终止添加过程。因此,把空字符算在内(两种情况下都要添加空字符),bugs数组应该足够大,以存放原始字符串(不包括空字符)、增加的最多13个字符和结束的空字符。程序清单11.15使用这一知识来计算available变量值,这个值被用作最多允许添加的字符数。
程序清单11.15 join_chk.c程序
下面是一个运行示例:
11.5.4 strcmp()函数
假定您希望把用户的响应和一个已有的字符串进行比较,如程序清单11.16所示。
程序清单11.16 nogo.c程序
尽管这个程序看起来不错,但却不能正确工作。ANSWER和try实际上是指针,因此比较式try! =ANSWER并不检查这两个字符串是否一样,而是检查这两个字符串的地址是否一样。由于ANSWER和try被存放在不同的位置,所以这两个地址永远不会一样,用户永远被告知他或她是“wrong”。这种程序总让人泄气。
我们需要的是一个可以比较字符串内容(content)而不是字符串地址(address)的函数。您可以自行设计一个,但并不需要这样做,因为strcmp() (代表string comparison)函数就可以实现这个功能。这个函数对字符串的操作就像关系运算符对数字的操作一样。特别地,如果两个字符串参数相同,它就返回0。改进后的程序如程序清单11.17所示。
程序清单11.17 compare.c程序