gets函数是如何实现的

berniechen0123 2007-01-22 01:43:11
我想看gets是如何实现的。在glibc2.4只找到
extern char *gets (char *__s) __wur;
没有找到它的实现,请高手帮忙
...全文
1496 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
berniechen0123 2007-01-23
  • 打赏
  • 举报
回复
可能没有原代码,该函数的实体应该在某个.dll或者.obj文件中。如果该函数是在.dll文件中,链接的时候,链接程序会根据函数声明在相应的.lib文件(可能就是标准库里面)里面找到该函数所在的dll;如果是在.obj文件中,那么链接程序会在该.obj文件中找到已经编译好函数实体直接链入你的程序。
我没有用过glibc,上面的说法是根据我的用VC的经验总结的,不保证正确
-----------------------------------------------
非常感谢你得解答,也许这个问题我应该发在linux区,glibc本身编译生成的就是.so文件,实际上和windows下的动态链接库一个意思。但是作为C标准库,它可以跨平台使用,如果还需要其他文件支持可能性不大。
rularys 2007-01-23
  • 打赏
  • 举报
回复


我没说清楚,glibc里我没找到这个函数的实现,我只发现了extern char *gets (char *__s) __wur;
这个声明。
其实对这个函数机制我没多大兴趣,我想知道这个gets到底在glibc的什么地方。我怎么搜不到?
------------------------------------------------------------------------------------

可能没有原代码,该函数的实体应该在某个.dll或者.obj文件中。如果该函数是在.dll文件中,链接的时候,链接程序会根据函数声明在相应的.lib文件(可能就是标准库里面)里面找到该函数所在的dll;如果是在.obj文件中,那么链接程序会在该.obj文件中找到已经编译好函数实体直接链入你的程序。
我没有用过glibc,上面的说法是根据我的用VC的经验总结的,不保证正确
hanliux 2007-01-23
  • 打赏
  • 举报
回复
char *gets(char *s)
{
int c;
char *cs;
unsigned oflag;

oflag = stdin->_flag & (_SFERR | _EOF);
stdin->_flag &= ~(_SFERR | _EOF);
cs = s;
while( (c = getc( stdin )) != EOF
&& (c != '\n') ) {
*cs++ = c;
}
if( c == EOF && (cs == s || ferror( stdin )) ) {
s = NULL;
} else {
*cs = '\0';
}
stdin->_flag |= oflag;
return( s );
}
frogmad 2007-01-22
  • 打赏
  • 举报
回复
大体是这样的:
int gets(char s[],int lim)
{//读入一行字符放到S中,并返回该行的长度
int c, i;

i = 0;
while (--lim > 0 && ( c = getchar())!=EOF && c !='\n')
s[i++] = c;
if ( c == '\n' )
s[i++] = c;
s[i] = '\0';
return i;
}
frogmad 2007-01-22
  • 打赏
  • 举报
回复
大体是这样的:
int gets(char s[],int lim)
{//读入一行字符放到S中,并返回该行的长度
int c, i;

i = 0;
while (--lim > 0 && ( c = getchar())!EOF && c !='\n')
s[i++] = c;
if ( c == '\n' )
s[i++] = c;
s[i] = '\0';
return i;
}
jone33 2007-01-22
  • 打赏
  • 举报
回复
其实就是一个字条串的输入函数吗,你定义一个结构体应该可以试试看
berniechen0123 2007-01-22
  • 打赏
  • 举报
回复
我没说清楚,glibc里我没找到这个函数的实现,我只发现了extern char *gets (char *__s) __wur;
这个声明。
其实对这个函数机制我没多大兴趣,我想知道这个gets到底在glibc的什么地方。我怎么搜不到?
arden1019 2007-01-22
  • 打赏
  • 举报
回复
介个函数啊,它从标准输入中读啊读,读到换行停住...简单的实现,估计就是 while里面放一个read调用.... 哇咔咔咔 介个东西貌似很容易 overflow
berniechen0123 2007-01-22
  • 打赏
  • 举报
回复
自己顶一下,大家帮帮忙

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧