如何在C中的链表中存储字符串类型的数据



因此,我试图了解链表如何存储字符串类型的数据。据我所知,链表使用数据结构以一种有点时尚的方式存储数据,这样你就可以很容易地在其中输入新的数据,删除它们,并根据自己的意愿重新排列它们。我的问题是,我需要从用户那里获取一个字符串,在链表中为其分配一个位置,然后转到列表中的下一个节点,然后再次执行相同的操作。然而,在这一点上,我只是试图从用户那里获取一个字符串,将其存储在new_node值中(或者(*new_node).value,对于那些考虑指针而不是链表的人来说),然后打印出来。main只是要求用户输入字符串,add_to_list函数接受输入并将其添加到链表的开头,而print函数只是打印链表中的内容。问题在于我的理解(至少我认为是问题所在)是我为数据结构分配输入值的点,new_node->value=*n应该只让值包含输入字符串,就像它只给另一个数组提供指针*n所包含的值一样,不幸的是,事实并非如此,我不确定为什么会这样。为了简单起见,下面是代码。

编辑:感谢大家的回复和解释,为什么在处理将一个字符数组的值分配给另一个数组(即:字符串)时,strcpy是必要的!

#include <stdio.h>
#include <stdlib.h>
#define LARGE 10
struct node *add_to_list(struct node *list, char *n);
struct node{
    char value[LARGE+1];
    struct node *next;
};
struct node *first = NULL;
void print(void);
int main(void) {
    
    char job[LARGE],*p;
    
    printf("Please enter printing jobsn");
    scanf ("%s", job);
    p=&job[0];
    
    first = add_to_list(first, p);
    print();
    return 0;
}

struct node *add_to_list(struct node *list, char *n)
{
    struct node *new_node;
    new_node = malloc(sizeof(struct node));
    if (new_node == NULL) {
        printf("Error: malloc failed in add_to_listn");
        exit(EXIT_FAILURE);
    }
    new_node->value = *n;
    new_node->next = list;
    return new_node;
}
void print(void){
    struct node *new_node;
    for(new_node=first;new_node!= NULL; new_node=new_node->next){
        printf("%sn",new_node->value);
    }
}

使用strcpy,而不是将char分配给不编译的数组。数组不是lvalue,在没有下标的情况下无法赋值,因此任何左边有数组名称的赋值都不会编译。更改

new_node->value = *n;

#include <string.h>
...
strcpy(new_node->value, n);
  1. 不能将字符串作为普通整数赋值。

  2. 无论何时要复制数组,都必须使用库函数,如memcpystrcpy。在您的情况下,它的字符数组,即字符串,您必须使用strcpy

  3. 使用char *strcpy(char *dest, const char *src);

所以在你的代码中,它必须像strcpy(new_node->value,n);而不是new_node->value=*n;

下面的链接中提到了使用strcpy的原因

为什么strcpy功能

相关内容

  • 没有找到相关文章

最新更新