puts和fputs函数及其区别,C语言puts和fputs函数详解

与 gets 函数一样,对于 puts 函数,同样建议使用 fputs 函数来代替 puts 函数。如下面的示例代码所示:

int main(void)
{
    char buffer[11];
    fgets(buffer,11,stdin);
    fputs(buffer,stdout);
    return 0;
}

其中,puts 函数的原型如下所示:

int puts(const char *str);

我们知道,puts 函数主要用于向标准输出设备(屏幕)写入字符串并换行,即自动写一个换行符(’\n’)到标准输出。理论上,该函数的作用与“printf("%s\n",str);”语句相同。但是,puts 函数只能输出字符串,不能进行相关的格式变换。与此同时,它需要遇到 null(’\0’) 字符才停止输出。因此,非字符串或无 null(’\0’) 字符的字符数组最好不要使用该函数打印,否则无法正常结束。如下面的代码所示:

int main(void)
{
    char str[] = {'H','E','L','L','O'};
    puts(str);
    return 0;
}

在上面的示例代码中,因为字符数组 str 在结尾处缺少一个 null(’\0’) 字符(也就是说它不是一个严格意义上的字符串)。因此,在调用 puts 函数的时候,程序将不知道什么时候停止输出,从而导致输出结果未定义。运行结果如下图所示:

在这里插入图片描述

图 1 示例代码的运行结果(Microsoft Visual Studio 2013)

正确的做法是应该在字符数组 str 的结尾处添加一个 null(’\0’) 字符,如下面的示例代码所示:

char str[] = {'H','E','L','L','O','\0'};

fputs 函数
函数的函数原型如下所示:

int fputs(const char *str, FILE *stream);

相对于 puts 函数,fputs 函数用来向指定的文件写入一个字符串(不换行)。当然,也可以使用 stdout 作为参数进行输出显示(它同样需要遇到 null(’\0’) 字符才停止输出),如下面的代码所示:

int main(void)
{
    char str[] = {'H','E','L','L','O','\0'};
    fputs(str,stdout);
    return 0;
}

其运行结果如下图所示:

在这里插入图片描述

图 2 示例代码的运行结果(Microsoft Visual Studio 2013)

fputs主要功能
当然,fputs 函数主要用于对指定文件进行写入操作,如下面的示例代码所示:

int main(void)
{
    FILE *fp=NULL;
    fp=fopen("myfile.txt","wb");
    if(fp == NULL)
    {
        printf("不能够访问该文件.\n");
        exit(1);
    }
    fputs("this is a test", fp);
    fclose(fp);
    fp=NULL;
    return 0;
}

运行上面的示例代码,文件“myfile.txt”会被写入一行“this is a test”字符串。

与 fgetws 一样,C99 同样也提供了 fputs 函数的宽字符版本 fputws,其函数的一般原型如下面的代码所示:

int fputws(const wchar_t * restrict s, FILE * restrict stream);

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值