【发布时间】:2020-08-14 03:01:08
【问题描述】:
我试图在 struct 中将 char[] 转换为 char*,当我将其分配给 p->name2=name 时,它会显示正确的单词,但是当我尝试使用 for 循环遍历链表时,它只会显示最后一个单词文件中有多少单词。为什么会发生?而且我不能使用字符串或库。我真的需要将每个单词作为字符符号(getchar())吗?
#include<iostream>
#include<fstream>
using namespace std;
struct elem{
char* name2;
elem* next;
};
int main(){
elem *first = NULL, *last = NULL,*q=NULL, *p;
fstream fin,fout;
char name[255];
fin.open("pasts.txt",ios::in);
fin>>name;
while (fin){
p = new elem;
p->next=NULL;
p->name2=name;
if(first==NULL){
first=last=p;
}
else{
p->next=last;
last=p;
}
fin>>name;
}
fin.close();
for(p=last;p!=NULL;p=p->next){
cout<<p->name2<<" ";
}
【问题讨论】:
-
std::string旨在避免此类问题。 -
是的!您必须复制 实际字符,否则您的所有节点都会有一个指向 same 字符串的
name2值。 (几乎可以肯定有一个副本与此非常接近,所以我没有发布答案。) -
char name[255];是一个变量。char* name2;在您的所有节点中都指向此变量。如果一个节点改变了变量,所有节点看到的都是一样的,因为它们是一样的。 -
您正在使用 C++,但您正在编写 C(因为您正在使用原始指针和字符缓冲区)。使用
std::string!