我正在尝试在链接列表中的节点之间交换数据字段,在交换char数组时遇到问题。这只是程序的一个示例。

struct node {
    int count;
    char word[50];
    struct node *next;
};

void swap_nodes( struct node *first, struct node *second ) {
    int temp_count;
    char *temp_word;

    temp_count = first->count;
    temp_word = first->word;
    first->count = second->count;
    first->word = second->word;
    second->count = temp_count;
    second->word = temp_word;
}

让我知道我做错了什么,我在c语言写作方面很新。

最佳答案

将字符数组指定给指针时,不会复制该数组:

char *temp_word;
temp_word = first->word;

temp_word指向数组的初始元素,因此分配给数组也会更改指针指向的数据。
可以通过声明50个字符的数组并使用strcpymemcpy进行复制来解决此问题:
char temp_word[50];
memcpy(temp_word, first->word, sizeof(temp_word));
memcpy(first->word, second->word, sizeof(temp_word));
memcpy(second->word, temp_word, sizeof(temp_word));

关于c - 在C中的节点之间交换字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26007223/

10-15 23:44