07 C语言基础--------字符串的输入输出操作

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*
gets:从屏幕获取一个字符串,返回字符串的首地址。可以获取带有空格的字符串。[不安全]
	
	char *gets(char *s);

	参数:用来存储字符串的空间地址。
	返回值:返回实际获取到的字符串首地址。

注意:由于scanf()和gets()无法知道字符串s大小,必须遇到换行符或读到文件结尾为止才停止接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况。
*/
int main0801(void)
{
	char str[100];
		 
	printf("获取的字符串:%s\n",gets(str));// 可以获取带有空格的字符串

	return 0;
}

/*
fgets:从屏幕获取一个字符串,预留 \0 的存储空间。空间足够读 \n , 空间不足舍弃 \n。[安全]
	
	char *fgets(char* s,int size, FILE strean);

	参1:用来存储字符串的空间地址。
	参2:描述空间的大小。
	参3:读取字符串的位置。键盘-》标准输入: stdin
	返回值:返回实际获取到的字符串首地址。
*/
int main0802(void)
{
	char str[10];

	printf("获取的字符串:%s\n", fgets(str,sizeof(str),stdin));

	return 0;
}

/*
puts:将一个字符串写出到屏幕。printf("%s","hello"); / printf(" hello\n"); /puts("hel1o" );
	
	int puts(const char *s);

	参1:待写出到屏幕的字符串。
	返回值:成功:非负数0。失败:-1。
*/
int main0803(void)
{
	char str[]="hello world";

	int ret = puts(str);// puts("hello world"); 输出字符串后会自动添加\n换行符。

	printf("%d\n",ret); // 输出0

	return 0;
}

/*
fputs:将一个字符串写出到stdout。输出字符串后,不添加\n换行符。
	
	int fputs(const char * str, FILE * stream) ;

	参1:待写出到屏幕的字符串。    屏幕--》标准输出: stdout
	参2:写出位置stdout
	返回值:成功:0。失败:-1。
*/
int main0804(void)
{
	char str[] = "hello world\n";

	int ret = fputs(str,stdout);// 输出字符串后不会添加\n换行符。

	printf("%d\n", ret); // 输出0

	return 0;
}

/*
strlen()函数:获取一个字符串的有效长度。不包括\n。

	size_ t strlen(const char *s);

	参1:待求长度的字符串。
	返回:有效的字符个数。
*/
int main0805(void)
{
	char str[] = "hello world";

	printf("sizeof(str)= %d\n", sizeof(str)); // 输出12:包含空格和\0
	printf("strlen(str)= %d\n", strlen(str)); // 输出11:包含空格、不包含\0

	char str1[] = "hello\0world";

	printf("sizeof(str1)= %d\n", sizeof(str1)); // 输出12:包含空格和\0
	printf("strlen(str1)= %d\n", strlen(str1)); // 输出5:到\0结束

	return 0;
}

// 实现strlen()函数:碰见‘\0’停止。
int main0806(void)
{
	char str[] = "hello world";

	int i = 0;
	while (str[i] != '\0')
	{
		i++;
	}
	printf("strlen(str)= %d\n", i); 

	// 等价于:printf("strlen(str)= %d\n", strlen(str));

	return 0;
}

// 字符串拼接
int main0807(void)
{
	char str1[] = "hello";
	char str2[] = "world";
	char str3[100];

	int i = 0; // 循环str1
	while (str1[i] != '\0')
	{
		str3[i] = str1[i]; // 循环着将str1的元素赋值到str3
		i++;
	}

	int j = 0; // 循环str2
	while (str2[j] != '\0')
	{
		str3[i+j] = str2[j]; // 此时i=5,循环着将str1的元素赋值到str3
		j++;
	}
	// 手动添加‘\0’标志
	str3[i + j] = '\0';

	printf("str3= %s\n", str3);

	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值