#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;
}
上述程序导致段错误。找不到根本原因。fgets中的段错误
#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;
}
上述程序导致段错误。找不到根本原因。fgets中的段错误
你忘了包括<stdlib.h>
这就是为什么,呼吁malloc()
家庭后,总是检查成功。在使用fgets()
中的指针之前进行NULL
检查。
另外,您需要使用FILE *
作为fgets()
中的第三个参数。在这里检查man page。在
fgets(n,MAX_D,0);
变化0
到stdin
从标准输入读取。
不,这是因为gets不会在用户打印的'n'字符串中添加任何字符。 – 2014-12-05 06:52:55
试试看代码
#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;
}
用于与fgets的语法 fgets(char* str, int num, FILE * stream);
。
您已经使用fgets(n,MAX_D,0);
变化的第三个参数要么stdin
(标准输入 - 键盘),或者它指向的一些文件。
可能您正在寻找fgets(n,MAX_D,stdin);
。
我知道这个问题已经得到解答。
这是另一种方式。
由于fgets()
预计第三个参数是FILE *
。
的int
文件decsriptor可以使用fdopen()
由于0
文件描述符对应stdin
,您可以使用下面的转换为FILE *
。
fgets(n, MAX_D, 0); /* Incorrect */
fgets(n, MAX_D, stdin); /* Correct */
fgets(n, MAX_D, fdopen(0, "r")); /* Also Correct */
谢谢Saurabh。 – Angus 2015-01-10 15:24:40
难道是fgets(,, 0)? – Dinesh 2014-12-05 06:51:21