c - 堆栈返回整数值,而不是字符串/字符。我该如何解决?

标签 c casting stack

我正在创建一个堆栈,但似乎无法使输出为字符串格式。这是我第一次尝试堆栈,我发现的每个示例似乎都指向结构的int值,而不是char值。

我尝试将int强制转换为字符,但是我不认为这是字符串的实际整数值(因为它们随同一个字符串而变化)。我假设它指向一个内存位置?

typedef struct carList 
{   
    char input[12];
    char make[12];
    char model[12];
    char size[12];
    char color[12];
    char power[12];
    float daily_rate;
    char rented;    
    struct carList *next;
}

typedef struct carList StackNode;
typedef StackNode *StackNodePtr;

void push(StackNodePtr *topPtr, char input) {
    StackNodePtr newPtr = malloc(sizeof(StackNode));

    if(newPtr != NULL) {

        newPtr->make[12] = input;
        newPtr->next = *topPtr;
        *topPtr = newPtr;
    } else {
        printf("Not inserted.");
    }
}

int pop(StackNodePtr *topPtr) {
    StackNodePtr tempPtr = *topPtr;
    int popValue = (*topPtr)->make[12];
    *topPtr = (*topPtr)->next;
    free(tempPtr);
    return popValue;
}

void printStack(StackNodePtr currentPtr) {
    if(currentPtr == NULL) {
        puts("The stack is empty.");
    } else {
        puts("The stack is:");

        while(currentPtr != NULL) {
            printf("%s --> ", currentPtr->make);
            currentPtr = currentPtr->next;
        }
        puts("NULL\n");
    }
}

int main() 
{
   StackNodePtr stackPtr = NULL;

   push(&stackPtr, "Test");
   push(&stackPtr, "test");
   push(&stackPtr, "Test");
   printStack(stackPtr);
} 


我想打印出来:

The stack is:
Test --> test --> Test --> NULL


但是我却收到了

The stack is:
 -->  --> -->NULL


当我将printStack函数更改为打印%d时,我收到了

The stack is:
12653804 --> 12653692 --> 12653580 -->NULL


因此,我认为这主要与我的打印功能有关,但是我一直在努力理解原因。

最佳答案

在进入push函数之前,请注意,您的结构定义应以分号结尾。除非您放置一个,否则代码不会编译。在声明中添加存储类说明符也很好。

typedef struct carList 
{   
    char input[12];
    char make[12];
    char model[12];
    char size[12];
    char color[12];
    char power[12];
    float daily_rate;
    char rented;    
    struct carList *next;
}carList;


至于您的问题,打印功能不是问题;这是您的推送功能!现在,您只是将数组的第一个字符分配给数组中的位置[12]。一探究竟:

newPtr->make[12] = input;


我们应该使用strcpy将字符串复制到newPtr-> make上。可以这样完成:

strcpy(newPtr->make, input);


另外,您的函数声明应传递一个char数组,而不是单个字符。

void push(StackNodePtr *topPtr, char *input)


将这些项目放在一起可以获得我的代码的工作版本:

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

typedef struct carList 
{   
    char input[12];
    char make[12];
    char model[12];
    char size[12];
    char color[12];
    char power[12];
    float daily_rate;
    char rented;    
    struct carList *next;
}carList;

typedef struct carList StackNode;
typedef StackNode *StackNodePtr;

void push(StackNodePtr *topPtr, char *input) {
    StackNodePtr newPtr = malloc(sizeof(StackNode));

    if(newPtr != NULL) {
        strcpy(newPtr->make, input);
        newPtr->next = *topPtr;
        *topPtr = newPtr;
    } else {
        printf("Not inserted.");
    }
}

int pop(StackNodePtr *topPtr) {
    StackNodePtr tempPtr = *topPtr;
    int popValue = (*topPtr)->make[12];
    *topPtr = (*topPtr)->next;
    free(tempPtr);
    return popValue;
}

void printStack(StackNodePtr currentPtr) {
    if(currentPtr == NULL) {
        puts("The stack is empty.");
    } else {
        puts("The stack is:");

        while(currentPtr != NULL) {
            printf("%s --> ", currentPtr->make);
            currentPtr = currentPtr->next;
        }
        puts("NULL\n");
    }
}

int main() 
{
   StackNodePtr stackPtr = NULL;

   push(&stackPtr, "Test");
   push(&stackPtr, "test");
   push(&stackPtr, "Test");
   printStack(stackPtr);
} 

关于c - 堆栈返回整数值,而不是字符串/字符。我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55927171/

相关文章:

c - printf() 中的递增变量

char *argv[] 到普通 C 中的浮点类型转换

C# 泛型和转换

c++ - c++中的唯一/智能指针 vector

c - 是否有一个程序(或 sed 脚本)可以从 C 文件中删除一个函数?

c++ - 使用 LibTar 提取文件

c - 是否可以终止不响应信号的程序?

c# - DateTime.Today 与 DateTime.Now

Python 代码类(class) : stacks and queues fish bug

c - x86_64 对齐堆栈并在不保存寄存器的情况下恢复