C 仅打印上次输入的字符串链表
我被困在这上面有一段时间了,有人能帮忙吗? 我的链表代码适用于整数,但似乎不适用于字符串,它只打印最后一个条目,知道吗? 谢谢C 仅打印上次输入的字符串链表,c,string,linked-list,C,String,Linked List,我被困在这上面有一段时间了,有人能帮忙吗? 我的链表代码适用于整数,但似乎不适用于字符串,它只打印最后一个条目,知道吗? 谢谢 #包括 #包括 #包括“node.h” #包括 类型定义结构节点{ char*val; 结构节点*下一步; }节点; int main(){ //读取文本文件 文件*fp; fp=fopen(“dict.txt”、“r”); //链表 chari[10]; node*head=malloc(sizeof(node)); 节点*cursr=头部; while(fscanf
#包括
#包括
#包括“node.h”
#包括
类型定义结构节点{
char*val;
结构节点*下一步;
}节点;
int main(){
//读取文本文件
文件*fp;
fp=fopen(“dict.txt”、“r”);
//链表
chari[10];
node*head=malloc(sizeof(node));
节点*cursr=头部;
while(fscanf(fp,“%s”,i)!=EOF)
{
fscanf(fp,“%s”,i);
//strcpy(cursr->val,i);
cursr->val=i;
printf(“读取字符串1 |%s |\n”,光标->val);
node*newnode=malloc(sizeof(node));
cursr->next=newnode;
cursr=newnode;
}
cursr->next=NULL;
cursr=头;
while(光标->下一步!=NULL)
{
printf(“%s”,光标->值);
cursr=cursr->next;
}
}
试试这个。它会起作用的
#include<stdlib.h>
#include<stdio.h>
//#include "node.h"
#include <string.h>
typedef struct node {
//char* val;
char val[10];
struct node* next;
}node;
int main(){
// read text file
FILE * fp;
fp = fopen ("dict.txt", "r");
// linked list
char i[10];
//int i;
node* head = malloc(sizeof(node));
node* cursr= head;
while (fscanf(fp, "%s", i) !=EOF)
{
//fscanf(fp, "%s", i);
strcpy(cursr -> val,i);
//cursr -> val = i;
printf("Read String1 |%s|\n", cursr->val );
node* newnode = malloc(sizeof(node));
cursr -> next = newnode;
//cursr = newnode;
cursr = newnode;
}
cursr->next = NULL;
cursr=head;
while (cursr -> next != NULL)
{
printf("%s",cursr->val);
cursr = cursr -> next;
}
}
#包括
#包括
//#包括“node.h”
#包括
类型定义结构节点{
//char*val;
char-val[10];
结构节点*下一步;
}节点;
int main(){
//读取文本文件
文件*fp;
fp=fopen(“dict.txt”、“r”);
//链表
chari[10];
//int i;
node*head=malloc(sizeof(node));
节点*cursr=头部;
while(fscanf(fp,“%s”,i)!=EOF)
{
//fscanf(fp,“%s”,i);
strcpy(cursr->val,i);
//cursr->val=i;
printf(“读取字符串1 |%s |\n”,光标->val);
node*newnode=malloc(sizeof(node));
cursr->next=newnode;
//cursr=newnode;
cursr=newnode;
}
cursr->next=NULL;
cursr=头;
while(光标->下一步!=NULL)
{
printf(“%s”,光标->值);
cursr=cursr->next;
}
}
你为什么要评论strcpy(cursr->val,i)代码>退出?我想那条线可以解决你的问题。当然,假设cursr->val
已经分配了所需的空间。@Kninnug他试图在下一行分配空间。但是他应该使用strcpy
。假设node
的val
成员是char*
(因为您出于任何原因选择不包含节点的定义),考虑这个:我不理解,<代码> CursR> Val= i;只将i[]
缓冲区的地址存储在节点的val
指针成员中,因此列表中的每个节点一旦构建,都有一个val
指向相同的i[]
缓冲区,您可能需要查看指针在C中的工作方式。因此我对//strcpy(cursr->val,i)进行了注释;因为这给了我一个核心。这是我的节点定义:
typedef结构节点{char*val;结构节点*next;}node;请不要在这里张贴代码。它属于您的问题(以及所有其他代码)。无论如何,丢失cursr->val=i代码>分配,放回您的strcpy
,并将您的节点val
成员更改为char-val[10]代码>这可能是“修复”这个问题的最快方法(我经常使用这个术语)。
#include<stdlib.h>
#include<stdio.h>
//#include "node.h"
#include <string.h>
typedef struct node {
//char* val;
char val[10];
struct node* next;
}node;
int main(){
// read text file
FILE * fp;
fp = fopen ("dict.txt", "r");
// linked list
char i[10];
//int i;
node* head = malloc(sizeof(node));
node* cursr= head;
while (fscanf(fp, "%s", i) !=EOF)
{
//fscanf(fp, "%s", i);
strcpy(cursr -> val,i);
//cursr -> val = i;
printf("Read String1 |%s|\n", cursr->val );
node* newnode = malloc(sizeof(node));
cursr -> next = newnode;
//cursr = newnode;
cursr = newnode;
}
cursr->next = NULL;
cursr=head;
while (cursr -> next != NULL)
{
printf("%s",cursr->val);
cursr = cursr -> next;
}
}