Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C &引用;“检测到堆栈崩溃”;由getline&;printf-我真的不明白为什么_C_Gcc_Overflow - Fatal编程技术网

C &引用;“检测到堆栈崩溃”;由getline&;printf-我真的不明白为什么

C &引用;“检测到堆栈崩溃”;由getline&;printf-我真的不明白为什么,c,gcc,overflow,C,Gcc,Overflow,说到C,我不是一个傻瓜——我更像一个彻头彻尾的愚蠢无知的傻瓜!我正试图编写一个程序来解析简单的文本文件,我希望它尽可能通用(为什么我使用getline)。这是我的代码: //afile.c #include <stdio.h> #include <stdlib.h> main( ) {FILE *fp1; char *filename; char **line; size_t *sz; int s; filename = "n"; if ((fp1 = fopen(

说到C,我不是一个傻瓜——我更像一个彻头彻尾的愚蠢无知的傻瓜!我正试图编写一个程序来解析简单的文本文件,我希望它尽可能通用(为什么我使用getline)。这是我的代码:

//afile.c 
#include <stdio.h>
#include <stdlib.h>

main( )
{FILE *fp1;
char *filename;
char **line;
size_t *sz;
int s;

filename = "n";
if ((fp1 = fopen(filename,"r")) == NULL ){printf("error...");return 1;}
        do {
    s = getline(&line,sz,fp1);
if (s != -1)
  printf(" %s  \n",line);//<-- %s seems to be wrong! %*s removes the gcc warning  
} while (s != EOF); 
fclose(fp1);}
//afile.c
#包括
#包括
主要()
{文件*fp1;
字符*文件名;
字符**行;
尺寸_t*sz;
int-s;
filename=“n”;
if((fp1=fopen(filename,“r”))=NULL){printf(“error…”);返回1;}
做{
s=getline(&line,sz,fp1);
如果(s!=-1)

printf(“%s\n”,line);//初始化line变量失败,它包含一个随机值。Readline可能会尝试realloc()它。 更新:行的定义也是错误的,正如其他人指出的,只需要一个asterix

int main(void )
{
    FILE *fp1;
    char *filename;
    char *line = NULL; /* <- here */
    size_t *sz;
    int s;

    ...
}
int main(无效)
{
文件*fp1;
字符*文件名;

char*line=NULL;/*初始化line变量失败,它包含一个随机值。Readline可能会尝试重新初始化它。 更新:行的定义也是错误的,正如其他人指出的,只需要一个asterix

int main(void )
{
    FILE *fp1;
    char *filename;
    char *line = NULL; /* <- here */
    size_t *sz;
    int s;

    ...
}
int main(无效)
{
文件*fp1;
字符*文件名;

char*line=NULL;/*您的指针重定向不一致。变量行声明为:

char **line;
它是指向字符的指针,或者是指向字符串的指针。getline()需要指向字符串的指针,但传递&line-指向字符串指针的指针

最后,指定的printf()格式是%s,它是否要格式化字符串,但您给它一个指向字符串的指针

长话短说:删除星号以创建

char *line;

指针重定向不一致。变量行声明为:

char **line;
它是指向字符的指针,或者是指向字符串的指针。getline()需要指向字符串的指针,但传递&line-指向字符串指针的指针

最后,指定的printf()格式是%s,它是否要格式化字符串,但您给它一个指向字符串的指针

长话短说:删除星号以创建

char *line;

getline
需要一个类型为
char**
的参数,而您提供了
&line
,即
char***
。此外,
getline
作用于其第一个参数指向的值的当前值(因此,
line
的值),并且您没有对其进行初始化。将程序更改为:

char *line = NULL;

应该没问题。

getline
需要类型为
char**
的参数,您提供了
&line
,即
char***
。此外,
getline
作用于其第一个参数指向的值的当前值(因此,
line
的值),但您没有对其进行初始化。请将程序更改为:

char *line = NULL;

应该没问题。

试着初始化
line=NULL
char**line对我来说似乎不合适。初始化
line=NULL
char**line对我来说似乎不合适