【问题标题】:Passing in a character string in a linked list struct在链表结构中传入字符串
【发布时间】:2016-01-16 10:00:36
【问题描述】:

我已将我的结构声明为

struct linkedStruct
{
char name;
int size;
enum groupstatus status;
struct linkedStruct* next;
};

我正在尝试将代码中的 char* 名称变量(字符串)传递到此结构的单个节点中。 例如,用户输入 Jon,我希望我的 char name 存储字符串 Jon。

我在弄清楚如何解决这个问题时遇到了一些麻烦。我试着简单地说明(假设我的节点名称是 temp)

temp->name = name;

但是,当我在存储时打印出名称值时,printf 什么也不返回。

我最初在我的结构中将其命名为 name[30],因为我们假设该名称少于 30 个字符,但这最终使我更加困惑,因为我在尝试将名称存储到结构中时不断出错带有 for 循环。

我的结构的其他实现

struct linkedStruct
{
char name[30]; //now a character array
int size;
enum groupstatus status;
struct linkedStruct* next;
};

代码是

for(int i = 0; i< sizeof(name); i++){
name[i] = temp->name[i];
//seemed totally wrong to do but I had no idea how to go about it

}

我只是想知道在这两种情况下如何存储它,因为我当前的代码不起作用。在我的 name[30] 实现中,我不知道如何声明/访问结构的数组表示法。

【问题讨论】:

  • 忘了说,传入的name变量是指向char的指针。

标签: c arrays struct char


【解决方案1】:

这是不可能的。 char 类型的变量只能容纳一个字符。

如果您知道名称不得超过 30 个字符,那么您应该知道

char name[30];

在结构声明中。 C 中的字符串是使用 strcpy() 复制的,因此您可以执行以下操作来在结构中设置名称:

struct linkedStruct temp;
strcpy(temp.name, "hello");

【讨论】:

  • 在编写充满缓冲区溢出危险的代码之前,学习始终使用strncpy 或类似名称可能是个好主意。一般来说,应该没有理由使用strcpy
【解决方案2】:

你需要:

strcpy(temp->name, name);

代替:

temp->name = name;

它将一个字符串从指针temp-&gt;name复制到内存指针name

注意

您必须确保 name 字符串包含的字符不超过 29 个。

【讨论】:

    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 2016-04-11
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多