社区
C语言
帖子详情
gets函数是如何实现的
berniechen0123
2007-01-22 01:43:11
我想看gets是如何实现的。在glibc2.4只找到
extern char *gets (char *__s) __wur;
没有找到它的实现,请高手帮忙
...全文
1592
9
打赏
收藏
gets函数是如何实现的
我想看gets是如何实现的。在glibc2.4只找到 extern char *gets (char *__s) __wur; 没有找到它的实现,请高手帮忙
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
自己顶一下,大家帮帮忙
C语言:
实现
puts
函数
,
gets
函数
实现
puts
函数
#include<stdio.h> void myputs(char *p) { while(*p != '\0') { printf("%c",*p++); } putchar('\n'); } int main() { char *p = "landlsad ad "; myputs(p); return 0; }
实现
get
函数
gets
()的
实现
char *
gets
(char *dest) { int c = getchar(); char *p = dest; while (c != EOF && c != ‘\n’) { *p++ = c; c = getchar(); } *p = ‘\0’; return dest; } 读取输入行并将其返回: void echo() { char buf[4];
gets
(buf...
手动
实现
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语言 :
实现
gets
()
函数
功能
实现
gets
函数
功能,数组首地址,数组字节数当做实参
c语言
gets
()
函数
的简单
实现
int my
Gets
(char *srcbuf,int buflen,int fp) { char buf[4] = {0}; int count = 0; if(srcbuf == NULL) return -1 while(read(fp,buf,1) > 0) { srcbuf[count++] = buf[0]; if((count >= buflen) || (buf[0] == '\n')).
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章