【发布时间】:2013-01-24 19:02:50
【问题描述】:
我有这个代码:
char **arr;
char* line=NULL;
int i=0;
size_t len=0;
ssize_t read1;
fp=fopen("list.txt","r");
if(fp==NULL)
exit(EXIT_FAILURE);
while((read1=getline(&line,&len,fp))!=-1)
i++;
fclose(fp);
fp=fopen("list.txt","r");
if(fp==NULL)
exit(EXIT_FAILURE);
arr=(char**)malloc(i*sizeof(char*)); // i is a variable i use to know the number of lines
i=0;
while((read1=getline(&line,&len,fp))!=-1)
{
line[strlen(line)]='\0';
arr[i]=(char*)malloc(strlen(line)+1);
strcpy(arr[i],line);
i++;
}
当我尝试strcpy 时程序崩溃。是malloc 问题吗?
我很确定i 足够大。 line 最初是 char* 和 NULL。
编辑:我忘了这个程序是在 Qt 中的。
【问题讨论】:
-
你不需要在 C 程序中强制转换
malloc()的返回值。 -
"
i是我用来知道行数的变量" - 那为什么它被命名为i而不是@ 987654331@/linesNumber? -
你怎么知道开头的
i足够大? -
line[strlen(line)]='\0'没有任何意义。 -
@Emil:由于您将
line定义为NULL,这意味着您希望getline为您分配缓冲区。所以有几件事。 1)你不需要strcpy那么,你可以只存储指针,它是你来管理的。 2) 完成后需要将 line 设置为NULL,否则 next 调用将重用该缓冲区,如果它是较长的行,可能会太短并溢出!