gpt4 book ai didi

c - 如何在C中将字符串初始化为链表结构

转载 作者:行者123 更新时间:2023-11-30 19:40:35 26 4
gpt4 key购买 nike

我有一个结构 Player,它充当链接列表。

我正在尝试初始化 Player 的“name var”部分。我收到错误:从“void*”到“char*”的转换无效。

我不明白为什么会发生这种情况,因为我已经分配了内存,然后只想复制字符串。

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

struct Player
{
char *name;
int jersey;
int points;
struct Player* next;
};




int main()
{
struct Player *head, *ptr;

head = (struct Player*)malloc(sizeof(struct Player));

char playerName[] = "Hurley";
head->name=malloc(strlen(playerName)+1);

strncpy(head->name, "Hurley");
head->jersey = 11;
head->points = 15;
head->next = NULL;

ptr = (struct Player*)malloc(sizeof(struct Player));

char playerName2[] = "Hill";
ptr->name=malloc(strlen(playerName2)+1);
strncpy(ptr->name, "Hill");


ptr->jersey =33;
ptr->points = 17;
ptr->next = NULL;

head->next=ptr;
printf("head name: %s, next name: %s\n", head->name, ptr->name);

free(head);
free(ptr);

}

最佳答案

真正的问题和唯一可能的解释是您正在使用 进行编译。编译器。在 不同,没有从 void * 到其他指针类型的隐式转换。哪里有。

您可能已将文件命名为 something.cpp,这会导致编译器认为这是 编码并编译它,导致您在帖子中提到的错误。

其他建议是

  1. 如果您要复制给定数量的字节并为其分配了非常精确的空间量,请像这样进行

    const char *playerName = "Hurley";
    size_t length = strlen(playerName);

    player->name = malloc(length + 1);
    if (player->name != NULL)
    memcpy(player->name, playerName, length + 1);

    比这更好的是,您可以使用 strdup()反而。在使用 player->name 指针之前还必须检查 NULL,因为当发生 malloc( 等问题时​​,它确实会返回 NULL ) 也是如此。

  2. 如果您正在写代码,建议避免转换 void * read this for more information 。一些程序员可能不同意,但他们中的大多数人认为最好不要进行强制转换。

  3. 不要重复自己的话。或者众所周知的 DRY 原则,在您的代码中,似乎适合创建一个函数 create_player() 来填充 struct 的实例,您按原样重复代码这不好。

关于c - 如何在C中将字符串初始化为链表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35229365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com