C语言中的字符串队列

时间:2015-03-24 21:14:13

标签: c string

我正在尝试编辑此程序。现在用户输入符号,我想让它与字符串一起使用。

#include <stdio.h>
#include <stdlib.h>

struct Node
{
    char data;
    struct Node *next;
};

struct queue
{
    struct Node *top;
    struct Node *bottom;
}*q;

void Write(char x)
{
    struct Node *ptr=malloc(sizeof(struct Node));
    ptr->data=x;
    ptr->next=NULL;
    if (q->top==NULL && q->bottom==NULL)
    {
        q->top=q->bottom=ptr;
    }
    else
    {
        q->top->next=ptr;
        q->top=ptr;
    }
}

char Read ()
{
    if(q->bottom==NULL)     
    {
        printf("Empty QUEUE!");
        return 0;
    }
    struct Node *ptr=malloc(sizeof(struct Node));
    ptr=q->bottom;
    if(q->top==q->bottom)
    {
        q->top=NULL;
    }
    q->bottom=q->bottom->next;
    char x=ptr->data;
    free(ptr);
    return x;
}

int main()
{
    q= malloc(sizeof(struct queue));
    q->top=q->bottom=NULL;
    char ch='a';
    printf("NOTE: To stop the entry, please enter 'q'!\n\n Enter a String: \n");
    while(ch!='q')
    {
        scanf("%c",&ch);
        Write(ch);
    }
    printf("\nThe entered String:\n\n");
    while(q->bottom!=NULL)
    {
        ch=Read();
        printf("%c",ch);
    }
    printf("\n\n");
    system("PAUSE"); 
    return 0;
}

所以我正在编辑它(下面的代码)并且在分配到类型&#39; char [10]&#39;时,我得到错误&#34; [错误]不兼容的类型来自类型&#39; char *&#39;&#34;

#include <stdio.h>
#include <stdlib.h>

struct Node
{
    char data[10];
    struct Node *next;
};

struct queue
{
    struct Node *top;
    struct Node *bottom;
}*q;

void Write(char x[10])
{
    struct Node *ptr=malloc(sizeof(struct Node));
    ptr->data=x;
    ptr->next=NULL;
    if (q->top==NULL && q->bottom==NULL)
    {
        q->top=q->bottom=ptr;
    }
    else
    {
        q->top->next=ptr;
        q->top=ptr;
    }
}

char Read ()
{
    if(q->bottom==NULL)     
    {
        printf("Empty QUEUE!");
        return 0;
    }

    struct Node *ptr=malloc(sizeof(struct Node));
    ptr=q->bottom;
    if(q->top==q->bottom)
    {
        q->top=NULL;
    }
    q->bottom=q->bottom->next;
    char x=ptr->data;
    free(ptr);
    return x;
}

int main()
{
    q= malloc(sizeof(struct queue));
    q->top=q->bottom=NULL;
    char ch][10]='a';
    printf("NOTE: To stop the entry, please enter 'q'!\n\n Enter a String: \n");
    while(ch!='q')
    {
        scanf("%c",&ch);
        Write(ch);
    }
    printf("\nThe entered String:\n\n");
    while(q->bottom!=NULL)
    {
        ch=Read();
        printf("%c",ch);
    }
    printf("\n\n");
    system("PAUSE"); 
    return 0;
}

我无法解决这个问题,所以我很想得到一些帮助...

1 个答案:

答案 0 :(得分:2)

您无法分配数组,但可以复制

要复制字符串,请使用strcpy

strcpy(ptr->data, x);

或者由于您的数组有限,可以使用strncpy

strncpy(ptr->data, x, sizeof(ptr->data) - 1);
ptr->data[sizeof(ptr->data) - 1] = '\0';

对于strncpy,如果源等于或长于指定长度,它将不会添加终止'\0'字符,因此我们必须确保字符串正确终止。