c - 链表中字符串分配的类型不兼容
问题描述
该程序的目的是将中缀表达式转换为后缀,然后使用链表计算值。我试过使用 strcpy 无济于事,或者我错过了一些东西。我需要在这里使用一个字符串,因为当数字达到两位数时,它不会被推入堆栈。对这个有帮助吗?我尝试使用函数,以便在我的主程序中调用仅有的几个可用的函数。我的队列也有一组单独的函数,但是一旦我弄清楚如何解决这个问题,我就可以轻松地将其应用于其他函数。
struct StackNode {
char SData[126]; //this one here
struct StackNode *next;
};
struct StackNode* StackNewNode(char SData) //i dont know what to put in the char SData, is it a *?
{ //because it produces an invalid conversion error.
struct StackNode *stackNode = (struct StackNode*)malloc(sizeof(struct StackNode));
stackNode->SData = SData;
stackNode->next = NULL;
return stackNode;
}
char topstack(struct StackNode *root)
{
if (root == NULL)
{
return 0;
}
return root->SData;
}
void push(struct StackNode **root, char SData)
{
struct StackNode *stackNode = StackNewNode(SData);
stackNode->next = *root;
*root = stackNode;
printf("\n%c pushed to stack\n", SData);
}
char pop(struct StackNode **root)
{
if (*root == NULL)
{
return 0;
}
struct StackNode *temp = *root;
*root = (*root)->next;
char pop = temp->SData;
free(temp);
printf("%c popped from stack\n", popped);
return pop;
}
解决方案
我假设您想要一个固定长度字符串的链接列表。
如果这是真的,StackNewNode
应该使用const char*
参数类型作为输入。另一种可能的方法是使用固定长度的字符串输入,使用char SData[126]
.
此外,stackNode->SData = SData;
必须修改该行以复制字符串,因为通常不会使用 C 中的简单赋值语句复制字符串。 string.h 中的函数strcpy就是为此而设计的,但由于您的目标缓冲区是一个固定长度的字符串大小 126,最好使用strncpy。
此外,topstack
还必须返回类似字符串的类型。一种方法是返回“const char*”类型。但请注意:如果您的节点空闲,则返回的字符串将不再有效。因此,您可能希望使用strdup复制该字符串,然后让调用的函数topstack
释放返回的字符串。另一种方法是添加一个新参数并将链接列表节点的内容复制到char* SData
函数主体中(在这种情况下,它假设 SData 是由调用的函数分配的,并且字符串的大小很大足以包含链表节点中的字符串内容)。topstack
SData
topstack
最后,同样的事情适用pop
。但是,由于该函数释放了链表节点,因此必须复制字符串。请注意,可能不需要返回值,因为topstack
函数已经可以做到。此外,popped
未定义,可能应替换为pop
.
推荐阅读
- angular - 角
- c# - 错误“无法将“System.RuntimeType”类型的对象转换为“EnvDTE80.DTE2”类型
- spring - 添加 JPA 依赖项时遇到问题
- c++ - 错误:命名空间“std”中没有名为“is_same_v”的模板;你是说'is_same'吗?
- python - 将python嵌套字典项写入文件
- rust - Warp:不能用?在异步路由处理程序中
- reactjs - 在 StoryBook 文档中使用 propTypes 的 ArgsTable
- ponylang - 如何分配可能引发错误的方法的返回值?
- vue.js - 页面加载后立即触发 Nuxt.js 无限加载
- chatterbot - 当我运行“pip install chatterbot”时出错