God*_*629 -2 c c++ compilation fgets
包含的代码完全不在书中,但它会返回错误.这本书有不正确的做法吗?我以前从未使用#include <string.h>过,#include <stdio.h>但我仍然不知道三个参数应该是什么.
#include <stdio.h>
#include <string.h>
int main(void)
{
char buffer[256];
printf("Enter your name and press <Enter>:\n");
fgets(buffer);
printf("\nYour name has %d characters and spaces!",
strlen(buffer));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译说
Semantic issue with (fgets( buffer ); - Too few arguments to function call, expected 3, have 1
Format string issue (strlen(buffer)); - Format specifies type 'int' but the argument has type 'unsigned long'
Run Code Online (Sandbox Code Playgroud)
fgets的正确格式是:
char * fgets ( char * str, int num, FILE * stream );
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下它应该是这样的:
fgets(buffer,sizeof(buffer),stdin);
fgets() 必须采取三个参数.
Enter key caracter被发现它会在此时停止.这里你只指定一个参数,所以这还不够.这是导致错误的原因.有一个simplified版本的fgets只读取用户输入的数据并调用它gets().
gets(buffer);
Run Code Online (Sandbox Code Playgroud)
但是这个函数是不安全的,因为如果用户输入的字节数多于缓冲区的大小,那么就会出现内存溢出.这就是你应该使用的原因fgets().
像这样:
fgets(buffer, sizeof buffer, stdin);
Run Code Online (Sandbox Code Playgroud)
请注意,我已经传递了值sizeof buffer和stdin.sizeof buffer是为了确保我们不会出现内存溢出.stdin是与键盘对应的流.因此,我们从键盘上安全地读取数据,您将获得一个可用的代码.
请参阅此处的参考资料:http : //www.cplusplus.com/reference/cstdio/gets/ http://www.cplusplus.com/reference/cstdio/fgets/
如果您感兴趣,还有其他功能可以读取用户输入,例如scanf():http://www.cplusplus.com/reference/cstdio/scanf/?kw = scanf
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |