链表中字符串赋值的不兼容类型

Incompatible types in assignment of strings in linked list

该程序的目的是将中缀表达式转换为后缀,然后使用链表计算值。我试过使用 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 中通常不会使用简单的赋值语句复制字符串。函数 strcpy in string.h is made for that, but since your destination buffer is a fixed-length string of size 126, it is better to use strncpy.

此外,topstack 还必须 return 类似字符串的类型。一种方法是 return 一个 "const char*" 类型。但要小心:如果您的节点空闲,字符串 returned 将不再有效。因此,您可能希望使用 strdup 复制该字符串,然后让调用 topstack 的函数释放 returned 字符串。另一种方法是将新参数 char* SData 添加到 topstack 并将链接列表节点的内容复制到函数主体中的 SData (在这种情况下,它假设 SData由调用topstack的函数分配,并且字符串的大小足以包含链表节点中的字符串内容)。

最后,同样的事情适用于 pop。但是,由于该函数释放了链表节点,因此必须复制该字符串。请注意,可能不需要 returning 值,因为 topstack 函数已经可以做到这一点。此外,popped 未定义,可能应替换为 pop