C &引用;“检测到堆栈崩溃”;由getline&;printf-我真的不明白为什么
说到C,我不是一个傻瓜——我更像一个彻头彻尾的愚蠢无知的傻瓜!我正试图编写一个程序来解析简单的文本文件,我希望它尽可能通用(为什么我使用getline)。这是我的代码: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(
//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对我来说似乎不合适