您的位置:

puts()函数详解

puts()函数是一个C语言标准库函数,用于将一个字符串输出到标准输出流stdout中。该函数的定义如下:

int puts(const char *str);

一、puts()

puts()函数的第一个参数为需要输出的字符串,函数会自动在字符串后面添加一个换行符,即‘\n’。如果输出成功,则返回非负数;否则,返回EOF。下面是一个例子:

#include <stdio.h>

int main()
{
    puts("Hello, World!");
    return 0;
}

当程序执行后,屏幕上会输出以下内容:

Hello, World!

可以看到,puts()函数会在字符串末尾自动添加一个换行符,这样就可以确保每次输出在不同的行上。

二、putsue

putsue是puts()函数的一个变体,也被称作puts with unbuffered error(带无缓存错误的puts)。这个版本的puts()函数与标准函数不同之处在于,在发生错误时,puts()函数会立即返回错误,而不是继续尝试输出内容。下面是一个例子:

#include <stdio.h>

int main()
{
    FILE *file = fopen("non-existent-file.txt", "r");
    if(file == NULL)
    {
        putsue("无法打开文件!");
    }
    return 0;
}

在上面的例子中,我们尝试打开一个不存在的文件,并且如果打开失败,使用putsue()函数输出错误消息。如果程序执行,stdout的输出将如下所示:

无法打开文件!\n

如果使用标准puts()函数输出,则无法立即知道发生了错误,因为puts()会尝试继续输出内容,直到输出长度为0,才会返回。这样可能导致程序在后期发生更多错误,因为他们无法及时排除。

三、puts on翻译

"puts on"是一个英语短语,可以简单地解释为“开启”,在某些情况下,puts()函数也可以理解为“开启”某些操作或设备。例如,在以下代码片段中,puts()函数用于打开并激活一个闪光灯:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    // 打开闪光灯
    FILE *fd = fopen("/sys/class/gpio/gpio18/direction", "w");
    if(fd == NULL)
    {
        puts("无法打开闪光灯!");
        return 1;
    }
    puts("激活闪光灯...");
    // 将方向设置为输出
    fputs("out", fd);
    fclose(fd);

    // 向控制设备写入高电平
    fd = fopen("/sys/class/gpio/gpio18/value", "w");
    if(fd == NULL)
    {
        puts("无法打开控制设备!");
        return 1;
    }
    fputs("1", fd);
    fclose(fd);

    return 0;
}

上面的代码片段是一个基于Linux的应用程序,用于通过控制器打开闪光灯。我们使用puts()函数作为程序执行的指示器,在每个步骤成功完成后输出一条消息。

四、puts off

与puts on相反,puts off可以简单地解释为“关闭”,并且在某些情况下,puts()函数可以理解为关闭操作或设备。例如,在以下代码片段中,使用puts()关闭闪光灯并释放IO设备:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    // 向控制设备写入低电平
    FILE *fd = fopen("/sys/class/gpio/gpio18/value", "w");
    if(fd == NULL)
    {
        puts("无法打开控制设备!");
        return 1;
    }

    puts("关闭闪光灯...");
    // 将输出电平设置为0
    fputs("0", fd);
    fclose(fd);

    // 释放GPIO设备
    FILE *gpio = fopen("/sys/class/gpio/unexport", "w");
    if(gpio == NULL)
    {
        puts("无法释放GPIO设备!");
        return 1;
    }
    fputs("18", gpio);
    fclose(gpio);

    return 0;
}

上面的代码片段是对前面闪光灯激活程序的回应。在关闭闪光灯后,我们使用puts()函数输出“关闭闪光灯”的消息。

五、puts()和put()的区别

尽管puts和put的名称相似,但它们实际上是两个不同的函数。puts()通常用于将字符串输出到stdout中,而put()(或putc())通常用于将单个字符输出到输出流中。

例如,在以下代码片段中,使用putchar()函数输出单个字符:

#include <stdio.h>

int main()
{
    putchar('H');
    putchar('e');
    putchar('l');
    putchar('l');
    putchar('o');
    putchar(',');
    putchar(' ');
    putchar('W');
    putchar('o');
    putchar('r');
    putchar('l');
    putchar('d');
    putchar('!');
    return 0;
}

上面的代码片段使用了putchar()函数输出“Hello, World!”中的每个字符。这个程序可能与之前的puts()函数一样,但输出会在同一行中,没有换行符。

六、puts()的功能

puts()函数最基本的功能是将一个C字符数组输出到标准输出流stdout中,每次输出一行并自动添加换行符。然而,puts()函数可以做更多的事情。

首先,puts()函数可以用于输出错误消息、调试信息或其他类型的消息。例如,当我们开发基于rpi和Linux的程序时,可以使用puts()函数指示我们某些组件是否已经成功启动:

if(is_gpio_enabled)
{
    puts("GPIO已启用");
}
else
{
    puts("无法启用GPIO");
}

另外,puts()函数可以用于诊断程序执行期间发生的问题。例如,在以下代码片段中,我们尝试打开文件并使用puts()函数输出错误消息:

#include <stdio.h>

int main()
{
    FILE *file = fopen("non-existent-file.txt", "r");
    if(file == NULL)
    {
        puts("无法打开文件!");
        return 1;
    }
    return 0;
}

在打开文件时,程序遇到错误并返回1。但是,由于我们在puts()函数调用之前使用了return语句,因此程序无法输出任何错误消息。我们可以通过将puts()函数移至return语句之前来解决这个问题:

#include <stdio.h>

int main()
{
    FILE *file = fopen("non-existent-file.txt", "r");
    if(file == NULL)
    {
        puts("无法打开文件!");
        return 1;
    }
    puts("文件打开成功!");
    return 0;
}

在这个例子中,当文件不能被打开时,puts()函数会在函数结束前输出错误消息。

七、put是什么意思?

put是一个常见的英语动词,意思是“放置”或“插入”。put()函数可以使用这个动词来记忆它是用于向输出流中‘放置’或‘插入’数据的。

八、put什么意思?

put仍然是代表“放置”的动词,但将其用于函数名称中意味着它是一个能够将数据放置到特定输出流中实现该目标的函数。put()函数实现了这个过程。

总结

puts()函数是C标准库中的一个非常有用的函数,可以将字符串输出到标准输出流中,并自动添加换行符。除此之外,puts()函数还可以用于输出错误或调试信息、诊断执行期间出现的问题,并且put和puts两个不同的函数也被设计用于放置数据到输出流中。

下面是一个完整的示例代码:

#include <stdio.h>

int main()
{
    // puts()函数
    puts("Hello, World!");

    // putsue()函数
    FILE *file = fopen("non-existent-file.txt", "r");
    if(file == NULL)
    {
        putsue("无法打开文件!");
    }

    // puts on函数
    FILE *fd = fopen("/sys/class/gpio/gpio18/direction", "w");
    if(fd == NULL)
    {
        puts("无法打开闪光灯!");
        return 1;
    }
    puts("激活闪光灯...");
    fputs("out", fd);
    fclose(fd);

    // puts off函数
    fd = fopen("/sys/class/gpio/gpio18/value", "w");
    if(fd == NULL)
    {
        puts("无法打开控制设备!");
        return 1;
    }
    puts("关闭闪光灯...");
    fputs("0", fd);
    fclose(fd);
    FILE *gpio = fopen("/sys/class/gpio/unexport", "w");
    if(gpio == NULL)
    {
        puts("无法释放GPIO设备!");
        return 1;
    }
    fputs("18", gpio);
    fclose(gpio);

    // putchar()函数
    putchar('H');
    putchar('e');
    putchar('l');
    putchar('l');
    putchar('o');
    putchar(',');
    putchar(' ');
    putchar('W');
    putchar('o');
    putchar('r');
    putchar('l');
    putchar('d');
    putchar('!');

    // put()函数
    putc('H', stdout);
    putc('e', stdout);
    putc('l', stdout);
    putc('l', stdout);
    putc('o', stdout);
    putc(',', stdout);
    putc(' ', stdout);
    putc('W', stdout);
    putc('o', stdout);
    putc('r', stdout);
    putc('l', stdout);
    putc('d', stdout);
    putc('!', stdout);

    return 0;
}