#include<stdio.h>
#include<malloc.h>
#define MAX_N 10000
#define MAX_D 5000
int main(){
char* n = malloc(MAX_D);
fgets(n,MAX_D,0);
printf("\n n : %s \n",n);
return 0;
}
上述程序导致分段错误。无法确定根本原因。
答案 0 :(得分:4)
char* fgets(char* str, int num, FILE * stream );
fgets
的第三个参数是FILE *
,而不是(POSIX)文件描述符,传递0
被视为空指针。变化
fgets(n, MAX_D, 0);
为:
fgets(n, MAX_D, stdin);
答案 1 :(得分:1)
fgets的语法是
fgets(char* str, int num, FILE * stream);
。
您已使用fgets(n,MAX_D,0);
将第三个参数更改为stdin
(标准输入 - 键盘)或将其指向某个文件。
可能您正在寻找fgets(n,MAX_D,stdin);
。
答案 2 :(得分:1)
我知道问题已经得到解答 这是另一种方法。
由于fgets()
期望第三个参数为FILE *
,因此
可以使用int
FILE *
文件解码器转换为fdopen()
由于0
文件描述符对应stdin
,因此您可以使用以下内容。
fgets(n, MAX_D, 0); /* Incorrect */
fgets(n, MAX_D, stdin); /* Correct */
fgets(n, MAX_D, fdopen(0, "r")); /* Also Correct */
答案 3 :(得分:0)
试试那段代码
#include<stdio.h>
#include<malloc.h>
#define MAX_N 10000
#define MAX_D 5000
int main()
{
char *n = malloc(MAX_D);
fgets(n,MAX_D,stdin); /* 0 means null */
printf("\n n : %s \n",n);
return 0;
}
答案 4 :(得分:-1)
您忘记加入<stdlib.h>
这就是为什么在致电malloc()
家人之后,总是要检查成功与否。在使用NULL
中的指针之前进行fgets()
检查。
此外,您需要在FILE *
中使用fgets()
作为第3个参数。在这里查看man page。在
fgets(n,MAX_D,0);
将0
更改为stdin
以从标准输入中读取。