首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中打印队列中的错误字符

在C++中打印队列中的错误字符
EN

Stack Overflow用户
提问于 2013-03-16 20:35:15
回答 1查看 144关注 0票数 0

我正在尝试打印一个结构中包含char数组的队列。我只是读取了一个带有网址的文本文件,将其推入队列并尝试打印。前4行是正常的,但随后它开始在几乎所有其他行中打印错误字符。我不知道怎么回事。即使我直接打印来自fgets的char数组,它也被正确地打印出来,队列也被正确地打印出来了,所以……我很困惑……

有什么想法吗?

相关代码如下:

结构:

代码语言:javascript
复制
typedef struct n_queue {
    char *web;
    struct n_queue *next;
} QUEUE_NODE, *P_QUEUE_NODE;

typedef struct k_queue {
    P_QUEUE_NODE head;
    P_QUEUE_NODE tail;
} kind_queue;

正在读取文件:

代码语言:javascript
复制
void readFile(kind_queue *q) {
    char data[9][150];
    FILE *f=fopen("list.txt", "r");
    if (f == NULL) perror("Web list couldn't be found.");
    int j =0;
    int i;

    while (fgets(data[j],150, f)!=NULL) {
            //If I uncomment the line below, both char array and char array in queue
            //are printed allright
        //printf("%s", data[j]);

            //Supress the new line char
        for (i=0;i<150;i++) {
            if (data[j][i] == '\n') {
                data[j][i]='\0';
                break;
            }
        }

        push_queue(q, data[j]);
        j++;
    }

    fclose(f);
}

推流代码:

代码语言:javascript
复制
void push_queue(kind_queue *q, char *web){
    P_QUEUE_NODE p;
    p = (P_QUEUE_NODE) malloc(sizeof(QUEUE_NODE));
    p->next = NULL;
    p->web = web;
    if (is_empty(q)) q->tail = q->head = p;
    else{
        q->tail->next= p;
        q->tail = p;
    }
}

主要功能:

代码语言:javascript
复制
int main () {

    kind_queue queue, *pt_queue_struct;
    pt_queue_struct = &queue;
    pt_queue_struct = init_queue(pt_queue_struct);
    readFile(&queue);

    print_queue(&queue);

    return(0);
}

最后是print函数:

代码语言:javascript
复制
void print_queue(kind_queue *q) {
    P_QUEUE_NODE paux;
    int j=1;
    for (paux=q->head; paux != NULL; paux=paux->next) {
        printf("%d: %s\n", j, paux->web);
        j++;
    }
}

真正的TXT:

代码语言:javascript
复制
http://www.google.es
http://stackoverflow.com
http://www.facebook.com
http://akinator.com/cea
http://developer.android.com/map
http://tirsa.es/65/65.htm
http://www.ufo.es/
http://thisty.com/init/
http://damned-c.me/

输出:

代码语言:javascript
复制
1: http://www.google.es
2: http://stackoverflow.com
3: http://www.facebook.com
4: http://akinator.com/cea
5: 
6: 
7: http://www.ufo.es/
8: http:/(dU[~
9: (dU[~
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-16 20:42:54

读入的数据存储在readFile退出时超出作用域的局部变量data中。如果将数据复制到节点结构中,这将是可以的。目前,节点数据指针只指向局部变量存储。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15449316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档