C:从链表中检索 char 值

标签 c linked-list char strcpy low-level

我一直在篡改存储 char 数组类型值的链接列表。我遇到的问题是检索要存储在另一个用于显示的字符中的值。

我尝试过使用(示例):

char display*;
node * data = <method to retrieve data as node *>

strcpy(display, data->value); 

这给了我警告:“传递‘strcpy’的参数 2 会使指针从整数而不进行强制转换”指向数据。

sprintf(display, "%s", data->value);

这给了我警告:

"format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’"

指向 data->value 并建议我使用 %d 代替。

目前,如果我编译,则会显示第一个字母,但其余的都是小方 block /字符。

我做错了什么?

谢谢

[编辑]

这是结构体的初始化:

typedef struct node_list {
    char value;
    struct node_list * next;
} node;

这是推送:

void push(char *value) {
    node_list* n = (node*)malloc(sizeof(node));

    n->value = *value;
    n->next = head;
    head = n;
}

[编辑2]

已修复抱歉浪费了时间。我遵循的指南显然有错误,因为它使用 char 值而不是 char value[10] 声明结构(例如。)

最佳答案

您正在向 push 函数传递一个字符串,但仅将其第一个字符存储在列表节点中。如果您想存储整个字符串,则需要进行一些更改。

首先,您需要将结构中的 value 更改为 char *

typedef struct node_list {
    char *value;
    struct node_list * next;
} node;

并且在您的 push 函数中,您需要创建字符串的副本以将其存储在节点中。

n->value=malloc(strlen(value)+1); // allocate memory to store the new string plus 1 extra for the null terminator
strcpy(n->value, value); // copy the string

当您稍后销毁列表时,需要记住释放额外的内存。

这仍然无法完全修复您最初发布的代码,因为 display 是一个未初始化的指针,因此您不能只是 strcpysprintf 到它。您要么需要为其分配足够的内存,就像我在 push 中所做的那样,或者您可以将值分配给 display,因为从名称来看,您'我们只会显示它。

或者可能根本不关心显示,而只是按原样使用节点中的。以下内容将正常工作...

node * data = <method to retrieve data as node *>
printf("Node value is %s\n",data->value);

关于C:从链表中检索 char 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59631190/

相关文章:

c - 简化循环条件

c - 如何比较指针和整数?

java - StringIndexOutOfBoundsException while 循环与charat()

java - 如何从链表内的数组列表读取数据

java - 我的代码中出现错误如何修复?

c# - 在 (c#) 库中使用 List<T> 与 LinkedList<T> 的性能差异是什么

char *str 并为 str 分配内存,仍然得到 SEGFAULT

编码到 C 中的接口(interface)

c - 如何使用结构体接收用户输入以传递给另一个方法?

c - 如何将值放入数组结构中?