C语言编程小练习8(数组与字符串)

C语言编程小练习8(数组与字符串)


8.1比较两个字符串大小。

================================================================
原来代码如图:

原来只是简单的一个小程序,但在GCC 中编译不能通过,警告如下:

查阅C相关函数库得知原因:”由于gets()无法知道字符串的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓存溢出的安全性问题。建议使用fgets()取代。”而GCC认为这个函数比较危险不应该被使用,所以不让使用gets()函数了,puts()函数同样也不支持了,那么还是需要使用以上两个函数的功能怎么办,GCC推荐使用fgets()和fputs()来替代,C语言官方手册也强烈建议用fget()彻底取代gets函数,但是记住,ANSIC并没有将gets从标准中取消掉!

其使用格式如下:

#include<stdio.h>
int main(void)
{
    char str[10];
    fgets(str, 10, stdin); //stdin 键盘标准输入
    fputs(str, 10, stout); //stdout 标准输出
    return 0;
}    

但是编译后又出现新的问题,使用fgets()函数时,若从终端读取一个字符串,回车,原来的gets函数会把最后的换行符\n换为\0,但fgets函数从stdin读入时则不处理\n,所以导致读入的字符多了个\n.

使用fgets函数不做其他处理运行的问题图

这个当然也有解决方案:那就是在其中找到\n换行符并替换为\0结束符就可以了, 具体演示在最后代码里。

用最后代码运行测试图,可以看到是我们预期的运行结果了。

================================================================

最后代码如下:

  1 #include <stdio.h>
  2 #include <string.h>
  3
  4 int main(void)
  5 {
  6     char t1[80], t2[80];
  7     int n;
  8     fputs("Input two character string:\n", stdout); //替代puts函数
  9     fgets(t1, 80<
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值