У меня есть этот код:
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.
malloc()в программе C. - person Carl Norum   schedule 24.01.2013i— это переменная, которую я использую для определения количества строк. Тогда почему она называетсяi, а неnumberOfLines/linesNumber? - person LihO   schedule 24.01.2013line? И каково определение/значениеlen? - person Evan Teran   schedule 24.01.2013iдостаточно велик? - person Oliver Charlesworth   schedule 24.01.2013iперед этим кодом? - person Evan Teran   schedule 24.01.2013line[strlen(line)]='\0'ничего не значит. - person Theodoros Chatzigiannakis   schedule 24.01.2013lineкакNULL, это означает, что вы ожидаете, чтоgetlineвыделит для вас буфер. Итак, пара вещей. 1) Тогда вам не нуженstrcpy, вы можете просто сохранить указатель, он ваш. 2) вам нужно установить строку вNULLпосле того, как вы закончите с ней, в противном случае следующий вызов будет повторно использовать этот буфер, возможно, он будет слишком коротким и переполнится, если это более длинная строка! - person Evan Teran   schedule 24.01.2013getline()действительно выделяет память). - person WhozCraig   schedule 24.01.2013