Целое число равно 0 после извлечения из C struct - PullRequest
0 голосов
/ 16 апреля 2020

Я не понимаю, почему messageSize печатает 0 при вызове removeNode, тем более что у него нет проблем с получением и печатью сообщения. Printf в insertNode правильно печатает размер. Это может быть просто недосмотр. Не уверен.

struct qnode {
    char message[256];
    int mesglen;
    struct qnode * next;
};

struct qheader {
    struct qnode * front;
    struct qnode * last;
};

struct qheader queue;

void insertNode() {
    struct qnode newnode;
    char * buffer = "hello";
    strcpy(newnode.message, buffer);
    printf("insert size: %ld\n", strlen(buffer)); // 5
    newnode.mesglen = (int)strlen(buffer);
    struct qnode * curnode = queue.front;
    if (curnode == NULL) {
        queue.front = &newnode;
        queue.last = &newnode;
    } else {
        while (curnode->next != NULL) {
            curnode = curnode->next;
        }
        curnode->next = &newnode;
        queue.last = &newnode;
    }
}

void removeNode() {
    char message[256] = {0};
    int messageSize;
    if (queue.front == NULL) {
        printf("queue empty\n");
    } else {
        strcpy(message, queue.front->message);
        messageSize = queue.front->mesglen;
        queue.front = queue.front->next;
        printf("MESSAGE: %s\n", message);
        printf("MESSAGESIZE: %d\n", messageSize);
    }
}

int main() {
    insertNode();
    removeNode();
    return 0;
}

И вывод:

insert size: 5
MESSAGE: hello
MESSAGESIZE: 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...