C Primer Plus—strcat与strncat函数拼接字符串(C语言)

今天看到了拼接字符串的部分,这道题很好地比较了strcat函数和strncat函数的不同。strcat函数如果分配给第一个数组的空间不够大,则可能溢出,而strncat函数因为有第三个参数给出最大添加的字符数,则可以放心的拼接,到了最大添加字符数或遇到空字符就会停止。
代码如下:

#include<stdio.h>
#include<string.h>
#define SIZE 30
#define BUGSIZE 13
int main()
{
	char * s_gets(char *st,int n);         //声明一个将fgets修改了一下的输入函数
	char addon[] = "s smell like old shoes.";
	char flower[SIZE];
	char bug[BUGSIZE];
	int available;
	
	puts("What's your favorite flower?");
	s_gets(flower,SIZE);
	if(strlen(flower) + strlen(addon) + 1 <= SIZE) 
	       //+1是因为末尾要留一个空字符    此行控制不溢出 
		strcat(flower,addon);     
	puts(flower);     //位置够就一起输出,不够就仅输出花名
	
	puts("What's your favorite bug?");
	s_gets(bug,BUGSIZE);
	available = BUGSIZE - strlen(bug) - 1;                 //求出可添加的最大字符数  同样地,-1是减去末尾空字符 
	strncat(bug,addon,available);       //在最大字符数范围内拼接
	puts(bug);
	
	return 0;
} 
char *s_gets(char *st,int n)
{
	char *ret_val;
	int i = 0;
	ret_val = fgets(st,n,stdin);   //赋给新变量是因为要return 输入的字符串
	if(ret_val)                    //先遇到\n就将换行符变为空字符,先遇到空字符就舍弃剩余字符 
	{
		while(st[i] != '\n' && st[i] != '\0')
			i++;
		if(st[i] == '\n')
			st[i] = '\0';
		else
		{
			while(getchar() != '\n')
				continue;
		}
	 } 
	return ret_val;
}

这道题将目前经常用到的修改后的fgets输入函数和两个拼接字符串函数都用到了,希望好好记住,能熟练运用。
欢迎交流探讨。
谢谢。

猜你喜欢

转载自blog.csdn.net/weixin_44009743/article/details/84894121
今日推荐