C语言 字符串指针问题1
发布网友
发布时间:2023-10-27 14:35
我来回答
共2个回答
热心网友
时间:2024-12-03 12:52
char data_1[50];
scanf("%s",data_1);
这个变量是在函数内部定义的,是个局部变量,函数运行结束以后,这个变量的内存被释放了。
你让你的指针指向被释放的内存,所以输出时乱码
你可以用malloc动态分配,这样的内存要自己手动释放才可以
热心网友
时间:2024-12-03 12:52
对上面说没有错误,但是还有一点没有说
说是在插入结点的时候,你的方法不对,Create_LinkList_1()中While循环里还改为
while(strcmp(data_1,"-1"))
{
Node_1=(struct Node *)malloc(sizeof(struct Node));
Node_1->data=data_1;
Node_1->Next=NULL;
if(H->Next == NULL)
{
H->Next = Node_1;
}
else
{
Node_1->Next=H->Next;
H->Next=Node_1;
}
scanf("%s",data_1);
}
我用VS调了一下:
你看一下结果
#include<stdio.h>
#include <malloc.h>
#include<string.h>
struct Node
{
char *data; //数据域为字符串
struct Node *Next; //指针域
};
// 在链表的头部插入节点建立链表
struct Node * Create_LinkList_1()
{
struct Node * Node_1;
struct Node * H;
H = NULL;
Node_1 =(struct Node *)malloc(sizeof(struct Node));
Node_1->data = (char *)malloc(50);
scanf("%s",Node_1->data);
Node_1->Next = NULL;
while(strcmp(Node_1->data,"-1"))
{
Node_1->Next=NULL;
if(H == NULL)
{
H = Node_1;
}
else
{
Node_1->Next = H;
H = Node_1;
}
Node_1 =(struct Node *)malloc(sizeof(struct Node));
Node_1->data = (char *)malloc(50);
scanf("%s",Node_1->data);
Node_1->Next = NULL;
}
return H;
}
//在链表尾部插入节点建立链表
// struct Node * Create_LinkList2()
// {
// struct Node * Node_1, *Node_tail;
// char data_1[50];
// struct Node * H=(struct Node *)malloc(sizeof(struct Node));
// H->Next=NULL;
// Node_tail = NULL;
// scanf("%s",data_1);
// while(data_1!="-1")
// {
// Node_1=(struct Node *)malloc(sizeof(struct Node));
// Node_1->data=data_1;
// Node_1->Next=Node_tail->Next;
// Node_tail->Next=Node_1;
// Node_tail = Node_1;
// scanf("%s",data_1);
// }
//
// return H;
// }
//打印函数
void Print_LinkList(struct Node * L)
{
while(L!=NULL)
{
printf("%s",L->data); //
L=L->Next;
}
}
//主函数
void main()
{
Print_LinkList(Create_LinkList_1());
}