Tag: 获得

有关换行和fgets()的查询

代码1: – int main() { char str[200]; fgets(str,200,stdin); printf(“%s”,str); return 0; } 输出: – ab cd ab cd (line feed) 代码2: – int main() { char str[200]; gets(str); printf(“%s”,str); return 0; } 输出: – ab cd ab cd 当我输入ab(space)cd(enter key) ,然后在fgets()情况下,我在输出中获得line feed ,而在gets()情况下,没有显示新换行符。 在这种情况下line feed的问题是什么。

fgets()调用重定向获取exception数据流

我正打算用C语言编写一个shell。 以下是源代码: #include #include #include #include #include int getcmd(char *buf, int nbuf) { memset(buf, 0, nbuf); fgets(buf, nbuf, stdin); printf(“pid: %d, ppid: %d\n”, getpid(), getppid()); printf(“buf: %s”, buf); if(buf[0] == 0) {// EOF printf(“end of getcmd\n”); return -1; } return 0; } int main(void) { static char buf[100]; int fd, r, ret; // Read and […]

如果有人抱怨gets(),为什么不对scanf(“%s”,…)做同样的事情?

从man gets : 永远不要使用gets()。 因为如果事先不知道数据就不可能分辨出get()会读取多少个字符,并且因为gets()将继续存储超过缓冲区末尾的字符,所以使用它是非常危险的。 它已被用来打破计算机安全。 请改用fgets()。 几乎每个地方我都看到scanf以一种应该具有相同问题的方式使用( 缓冲区溢出/缓冲区溢出 ): scanf(“%s”,string) 。 这种情况存在这个问题吗? 为什么scanf手册页中没有关于它的引用? 为什么用-Wall编译时gcc不会发出警告? ps:我知道有一种方法可以在格式字符串中指定scanf字符串的最大长度: char str[10]; scanf(“%9s”,str); 编辑:我不是要求确定前面的代码是否正确。 我的问题是:如果scanf(“%s”,string)总是错误的,为什么没有警告,并且手册页中没有任何关于它的内容?

看跌和获取function如何运作?

main() { char name[20]; printf(“enter your name\n”); scanf(“%s”,name); printf(“%s”,name); gets(name); puts(name); } 输入:Sampad Saha 产量 桑帕德萨哈 这里put只使用从gets()的输入。 因为,如果我省略这个printf()输出将是 萨哈 所以这里的put不会打印通过scanf()给出的任何内容。 main() { char color[20]; printf(“enter your name\n”); scanf(“%s”,color); puts(color); } 但是这里的puts()使用了来自scanf()的输入。

即使使用fflush(stdin),程序也不会在scanf()之后执行gets()

在浪费了太多时间搜索为什么我的程序在使用scanf()之后没有执行gets()时,我找到了一个解决方案,即在scanf()之后使用fflush(stdin)来使gets()获得一个字符串。 问题是fflush(stdin)没有做到预期的结果:程序继续跳过gets(),我不能在控制台中写任何短语来读取。 我的代码是下一个: #include #include int main(){ char nombre[10]; char mensaje[80]; printf(“Type your name:\n”); scanf(“%s”, nombre); fflush(stdin); printf(“Now, type a message:\n”); gets(mensaje); printf(“3/%s:%s”,nombre,mensaje); return 0; }