Я хочу иметь массив указателей на строки и просто получить пространство, необходимое для каждой строки. Я знаю malloc и getc требуются, но не знакомы с их использованием.Как создать динамический массив строк с пространством, просто необходимым для каждой строки в C
Это часть моего кода. Он выдает сообщение об ошибке "неисправность Сегментация" ....
char **allstrs;
char *one_str;
int totstrs=0,current_size= INITIALSIZE;
allstrs = (char **)malloc(current_size*sizeof(char*)); //dynamic array of strings
while(getstr(one_str)!=EOF){
if(totstrs == current_size){
current_size *=2;
allstrs = realloc(allstrs, current_size*sizeof(char*));
}
strcpy(allstrs[totstrs],one_str);
printf("String[%d] is : %s\n",totstrs,allstrs[totstrs]);
totstrs ++;
}
free(allstrs); //deallocate the segment of memory
return 0;
и функцию getstr под названием
char c;
int totchars=0, current_size=INITIALCHARS;
str = (char*)malloc(sizeof(char));
while(c!='\n'){
c = getc(stdin);
if(c==EOF){
return EOF;
}
if(totchars == current_size){
current_size *=2;
str = (char*)realloc(str,current_size*sizeof(char));
}
str[totchars] = c; //store the newly-read character
totchars++;
}
str[totchars]='\0'; //at the end append null character to mark end of string
return 0;
}
'getstr (символ *)' 'изменение getstr (символ **)' и 'STRCPY (allstrs [totstrs], one_str)' в 'allstrs [totstrs] = one_str; ',' char c; 'to' int c; ',' totchars == current_size' to 'totchars == current_size-1' в' getstr' – BLUEPIXY
Стандартное предупреждение: не бросать 'void *', как было возвращено 'malloc' & friends! C не является C++. – Olaf
Как вы сказали, у вас есть два вопроса.Один для malloc и один для getc. Вы должны изучать их обоих и задавать вопросы по их использованию. Поскольку ваш вопрос стоит, это почти так, как будто вы просите нас переписать свой код для вас. – Rob