如何在结构中分配 space

how to allocate space in a struct

我有以下内容:

int main(void)
{
    typedef struct node
   {
       char * word = malloc(46 * sizeof(char));
       struct node *left;
       struct node *right;
   } node;
 }

但它产生:

test2.c:12:16: error: expected ';' at end of declaration list
char * word = malloc(46 * sizeof(char));

如何以及在哪里为结构分配内存?

您不能在 C 中的定义中初始化结构的数据成员。

您需要创建一个结构类型的对象,并在其声明中对其进行初始化或单独为其数据成员赋值。

例如

int main(void)
{
    typedef struct node
   {
       char * word;
       struct node *left;
       struct node *right;
   } node;

   node *new_node = malloc( sizeof( node ) );
   new_node->word = malloc( 46 * sizeof( char ) );
   strcpy( new_node->word, "Some word or words" );
   new_node->left = NULL;
   new_node->right = NULL;
 }

这是一个演示程序。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    typedef struct node
   {
       char * word;
       struct node *left;
       struct node *right;
   } node;

   node *new_node = malloc( sizeof( node ) );
   new_node->word = malloc( 46 * sizeof( char ) );
   strcpy( new_node->word, "Some word or words" );
   new_node->left = NULL;
   new_node->right = NULL;
   
   puts( new_node->word );
   
   free( new_node->word );
   free( new_node );
 }

它的输出是

Some word or words

注意,如果要在除 main 之外的函数中使用它,需要在文件范围内定义结构。

这里有一个更有意义的演示程序。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct node
{
    char * word;
    struct node *left;
    struct node *right;
} node;

typedef struct list
{
    node *head;
    node *tail;
} list;

int push_back( list *list, const char *word )
{
    node *new_node = malloc( sizeof( node ) );
    int success = new_node != NULL;
    
    if ( success )
    {
        new_node->word = malloc( strlen( word ) + 1 );
        success = new_node->word != NULL;

        if ( success )
        {
            strcpy( new_node->word, word );
            new_node->right = NULL;
            new_node->left = list->tail;
                
            if ( list->head == NULL )
            {
                list->head = new_node;
            }
            else
            {
                list->tail->right = new_node;
            }
                
            list->tail = new_node;
        }
        else
        {
            free( new_node );
        }
    }

    return success;
}

void free_list( list *list )
{
    while ( list->head )
    {
        node *current = list->head;
        list->head = list->head->right;
        free( current->word );
        free( current );
    }
    
    list->tail = NULL;
}

void display_list( const list *list )
{
    for ( const node *current = list->head; current != NULL; current = current->right )
    {
        printf( "%s -> ", current->word );
    }
    
    puts( "null" );
}

int main(void)
{
    list list = { .head = NULL, .tail = NULL };

    push_back( &list, "Hello doubly-linked list!" );
    
    display_list( &list );
    
    free_list( &list );
}

它的输出是

Hello doubly-linked list! -> null