c - 字符串和链表 - C 编程

标签 c

我目前有代码:

struct node
{
    int data;
    struct node *next;
}*head,*var,*trav;

void insert_at_end(int value)
{
      struct node *temp; 
      temp=head;
      var=(struct node *)malloc(sizeof (struct node));
      var->data=value;
      if(head==NULL)
      {
          head=var;
          head->next=NULL;
      }
      else
      {
          while(temp->next!=NULL)
          {     
               temp=temp->next;
          }
          var->next=NULL;
          temp->next=var;
      }
}

void display()
{
     trav=head;
     if(trav==NULL)
     {
          printf("\nList is Empty");
     }
     else
     {
          printf("\nElements in the List: ");
          while(trav!=NULL)
          {
               printf(" -> %d ",trav->data);
               trav=trav->next;
          }
      printf("\n");
      }
}

int main(){

  int value;
  scanf("%d", &value);
  insert_at_end(value);
  display();
  return 0;
}

插入 int 一切正常。但是,我想插入一个字符串。像“狗”这样的词。我变了

int data to char data[255];

并将“%d”的所有实例更改为“%s”,但这不起作用。有人有什么想法吗?谢谢。

最佳答案

您需要进行以下更改:

  1. “int 数据”转换为“char 数据[255]”

  2. 将 insert_at_end 的参数更改为“char *value”

  3. 以下几行代替了对 insert_at_end 的赋值:

    strncpy(var->data, value, sizeof(var->data));

    var->data[sizeof(var->data)-1] = '\0';

  4. 将 %d 更改为 %s

  5. 将从输入读取值的代码更改为以下内容:

    字符值[255];

    fgets(值, sizeof(值), 标准输入);

    insert_at_end(值);

此代码不会删除 fgets 将读取的换行符。留给读者练习如何去除多余的换行符。它还留给读者练习如何动态分配内存以便支持可变长度字符串(提示:使用 malloc 并记住释放它!)

但是,为了了解为什么需要进行这些更改以及了解数组、字符串和指针在 C 中的工作原理,我建议您阅读一本基础的 C 书籍。完整的解释不适合这个有限的答案。从你的问题中我看出你没有理解C的一些基本原理,可能C不一定是你现在使用的最好的语言。

我还建议阅读一些基本的安全编码指南,以了解为什么在 strncpy 之后完成“\0”赋值,因为 strncpy 本质上是一个不安全的函数。

关于c - 字符串和链表 - C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29133043/

相关文章:

找不到配置文件/etc/startup.mk

c - 具有副作用的可变长度数组参数大小表达式

c - C中lstat fstat和stat的区别

c - Linux在c程序执行过程中更改pgrp(进程组)

c - 如何在 C 程序中引入一个有很多有效数字的小数字?

ios - 将多个静态库编译成一个 iOS Framework

c - C中的头文件及其用法

在结构中创建指向数组的指针

c++ - 是否有预处理器定义来区分 gcc 和 g++ 代码?

c - 使用C语言中的递归函数搜索数组中的元素