社区
C语言
帖子详情
gets函数是如何实现的
berniechen0123
2007-01-22 01:43:11
我想看gets是如何实现的。在glibc2.4只找到
extern char *gets (char *__s) __wur;
没有找到它的实现,请高手帮忙
...全文
1549
9
打赏
收藏
gets函数是如何实现的
我想看gets是如何实现的。在glibc2.4只找到 extern char *gets (char *__s) __wur; 没有找到它的实现,请高手帮忙
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
自己顶一下,大家帮帮忙
gets
函数
,C语言
gets
函数
详解
gets
函数
,C语言
gets
函数
详解 在前面从键盘输入字符串是使用 scanf 和 %s。其实还有更简单的方法,即使用
gets
()
函数
。该
函数
的原型为: # include <stdio.h> char *
gets
(char *str); 这个
函数
很简单,只有一个参数。参数类型为 char* 型,即 str 可以是一个字符指针变量名,也可以是一个字符数组名。
gets
()
函数
的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。 下面将前面中使用 scanf
gets
函数
和puts
函数
详解
gets
函数
和puts
函数
详解
c语言
gets
函数
编译出错,克服C语言
gets
函数
缺陷的方法初探
克服C语言
gets
函数
缺陷的方法初探一
gets
函数
简介
gets
函数
是C语言用于从stdin流中读取字符串的
函数
。
gets
函数
接收用户从键盘上输入的字符直到遇到回车时终止。原型是:char*
gets
(char *buff);举例:#include int main(){charstr[30];while(!str!=
gets
(str));printf(“%s\n”,str);return 0;...
c语言 :
实现
gets
()
函数
功能
实现
gets
函数
功能,数组首地址,数组字节数当做实参
手动
实现
gets
_s
函数
这两天看到再C11标准中,对于
gets
函数
说了一些危险,并推荐使用
gets
_s
函数
。 但在早期的编译器上还是不支持
gets
_s
函数
的,这样可以自己
实现
一个
gets
_s
函数
。 char *
gets
_s(char * buffer, int num) //
gets
_s
函数
gets
_s手工
实现
{ if (f
gets
(buffer, num, stdin) != 0) { size_t len = strlen(buffer); if (l
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章