gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:27:15 27 4
gpt4 key购买 nike

我正在创建一个堆栈,但似乎无法使输出为字符串格式。这是我第一次尝试堆栈,我发现的每个示例似乎都指向结构的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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com