我目前有代码:
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”,但这不起作用。有没有人有任何想法?谢谢。
答案 0 :(得分:1)
您需要进行以下更改:
" int data"进入" char数据[255]"
将insert_at_end的参数更改为" char * value"
以下行而不是分配到insert_at_end:
strncpy(var-> data,value,sizeof(var-> data));
var-> data [sizeof(var-> data)-1] =' \ 0';
将%d更改为%s
将读取值的代码更改为以下内容:
char值[255];
fgets(value,sizeof(value),stdin);
insert_at_end(值);
此代码不会删除fgets将读取的换行符。它留给读者如何去除额外的换行。它还作为练习向读者留下如何动态分配内存,以便可以支持可变长度的字符串(提示:使用malloc并记住释放它!)
但是,要理解为什么需要进行这些更改并理解数组,字符串和指针在C中是如何工作的,我建议您阅读一本基本的C书。完整的解释并不适合这个有限的答案。我从你的问题中看出你没有理解C的一些基本原理,而且可能是这种情况C不一定是你现在使用的最佳语言。
我还建议阅读一些基本的安全编码指南,以了解为什么' \ 0'在strncpy之后完成赋值,因为strncpy本身就是一个不安全的函数。