упражнение дает мне основную функцию, которая печатает список строк таким образом, то есть знает, что каждое MAX_NAME_LENGTH имеет значимое имя и печатает его.
#define MAX_NAME_LENGTH 32
#define DIM 4
int main(int argc, char *argv[]) {
char *list=calloc((MAX_NAME_LENGTH+1),sizeof(char));
edit(&list);
int len=strlen(list);
printf("strlen list %ld\n",strlen(list));
int nusers = len / (MAX_NAME_LENGTH+1);
int p=0;
printf("user online list:\n");
for(int i=0,p=0;i<nusers; ++i, p+=(MAX_NAME_LENGTH+1)) {
printf(" %s\n", &list[p]);
}
free(list);
return 0;
}
Что я не могу сделать, так это заполнитьстрока правильно, даже если строка выделена длиной DIM*(MAX_NAME_LENGTH+1)
, когда я собираюсь сделать копию, длина меньше MAX_NAME_LENGTH, как это сделать?
Это функция редактирования, которую я использую для заполнениясписок строк
int edit(char** list){
int i;
char *array[DIM];
int offset=0;
for(i=0;i<DIM;i++){
array[i]=calloc((MAX_NAME_LENGTH+1),sizeof(char));
}
strncpy(array[0],"try",MAX_NAME_LENGTH+1);
printf("array: %s len %ld\n",array[0],strlen(array[0]));
strncpy(array[1],"test",MAX_NAME_LENGTH+1);
printf("array: %s len %ld\n",array[1],strlen(array[1]));
strncpy(array[2],"test5",MAX_NAME_LENGTH+1);
printf("array: %s len %ld\n",array[2],strlen(array[2]));
strncpy(array[3],"testone",MAX_NAME_LENGTH+1);
printf("array: %s len %ld\n",array[3],strlen(array[3]));
*list=realloc(*list,DIM*(MAX_NAME_LENGTH+1));
for(i=0;i<DIM;i++){
strncpy(*list+offset,array[i],MAX_NAME_LENGTH+1);
offset=offset+MAX_NAME_LENGTH+1;
printf("list: %s len %ld\n",*list,strlen(*list));
}
return 0;
}