如何实现puts()函数?

时间:2010-07-14 15:42:53

标签: c

我试图实现puts函数。它实际上返回一个值,但我不能得到它应该返回的内容。请检查我的代码并引导我进一步

/* implementation of puts function */
#include<stdio.h>
#include<conio.h>
void puts(string)
{
    int i;
    for(i=0;    ;i++)
    {
        if(string[i]=='\0')
        {
            printf("\n");
            break;
        }
        printf("%c",string[i]);

    }

}

7 个答案:

答案 0 :(得分:4)

请参阅代码中的注释。

int puts(const char *string)
{
    int i = 0;
   while(string[i])  //standard c idiom for looping through a null-terminated string
    {
        if( putchar(string[i]) == EOF)  //if we got the EOF value from writing the char
        { 
            return EOF;
        }
        i++;
    }
   if(putchar('\n') == EOF)  //this will occur right after we quit due to the null terminated character.
   {
       return EOF;
   }
   return 1; //to meet spec.
}

而且,作为一个旁边 - 我写了相当于putc,在嵌入式系统上开发几个不同的时间。所以它并不总是一个学习练习。 :)

对EOF的评论:它是stdio.h中的POSIX常量。 在我的Linux stdio.h中,我有这个定义:

/* End of file character.
   Some things throughout the library rely on this being -1.  */
#ifndef EOF
# define EOF (-1)
#endif

该定义代码是GPL 2.1。

答案 1 :(得分:0)

string应该是什么?您应该define your function better,尝试:

void my_puts(const char *string)

而不是

void puts(string)

如我所包含的链接中所述,您需要指定要传递的参数的数据类型(在您的示例中为string),并且您不能使用已定义的函数的名称(即puts)。

答案 2 :(得分:0)

从手册页:

#include <stdio.h>

int fputc(int c, FILE *stream);
int fputs(const char *s, FILE *stream);
int putc(int c, FILE *stream);
int putchar(int c);
int puts(const char *s);

返回值

fputc()putc()putchar()将写为无符号字符集的字符返回到int或EOF时出错。

puts()fputs()在成功时返回非负数,或在出错时返回EOF

答案 3 :(得分:0)

好吧,stdio的puts()在成功时返回一个非负数,或者在错误时返回EOF。

答案 4 :(得分:0)

除了已经说过的内容之外,我个人反对重新定义标准库函数。但是,如果你绝对必须(例如做家庭作业),并且你的编译器抱怨'puts'的冲突类型,请尝试把它放在顶部:

#define puts _puts
#include <conio.h>
#include <stdio.h>
#undef puts

答案 5 :(得分:0)

在没有多线程支持(裸机编程)的系统中, putc 通常不会返回任何内容。

在这些情况下,不用担心返回代码。 最简单的 puts 实现是要走的路:

numbers[i]

答案 6 :(得分:-1)

我认为实施看跌期权没有任何意义! 无论如何,你应该阅读看跌期权的规格,这样你才能做到。

这可能会有所帮助

int myputs(char* s)
{
   int x = printf("%s\n", s);
   return (x > 0) ? x : EOF;
}

你应该包括stdio.h,这样你就可以使用printf和EOF。

请注意,这不是put的EXACT实现,因为在错误put中设置错误指示符并执行其他操作。

有关投注的更多详情,here