2017-04-18 102 views
-1

我有一个动态分配的结构数组。我想添加新的结构到数组的末尾。如何将结构添加到结构数组的结尾?

的结构定义为

struct book 
{ 
    char *id; 
    char *bookName; 
    char *authorName; 
    char *numOfPages; 
    char *publishingYear; 
    char *category; 
} typedef t_book; 

定义为

t_book* books= (t_book*)malloc(4*sizeof(t_book)); 
+0

也许增加数字'4'并且会做诡计? mm – kaldoran

+0

这意味着什么“在数组末尾添加新结构”?你有一个确切的4个元素的数组。你想创建5th元素还是只需要为4th设置一个值? –

+1

[realloc](https://linux.die.net/man/3/realloc)...? – LPs

回答

1

重新分配存储器与realloc()

size_t new_book_count = book_count + 1; 
//        size of 1 book * book count 
void *newbooks = realloc(books, sizeof *books * new_book_count); 
// Successful ? 
if (newbooks == NULL) { 
    perror("Out of memory"); 
    return error; 
} 
books = newbooks; 
// copy in new structure 
books[book_count] = new_struct; 
book_count = new_book_count; 
0

阵列这样做

t_book* books; 
books = malloc(4 * sizeof *books); //Preferred way to do malloc 
//At this point you want to add one in the end 
t_book* bookstemp=realloc(books,5 * sizeof *books); 
// temporary variable for the case where realloc fails not to loose data 
if(bookstemp){ 
    printf("Realloc succeeded\n"); 
    books=bookstemp; 
} 
else 
    printf("Realloc failed\n"); 
+0

@chux:你说得对,那有点松动。 – sjsam

+1

我不认为''realloc(书,5 * sizeof * t_book)'会编译。建议'realloc(书籍,5 * sizeof *书籍)'见[this](http://stackoverflow.com/q/5894892/2410359) – chux

+0

@chux:的确是这样的意图,不仅仅是这个, malloc'也.. – sjsam