【发布时间】:2021-06-08 08:02:29
【问题描述】:
正在将一个字符串推送到我的堆栈上,目前我正在获取随机字符(字符没有被推送到堆栈上,因为当我事后检查时我的堆栈是空的)
这里是相关的功能和结构
typedef char stackitem;
struct stack {
stackitem d;
struct stack *next;
};
typedef struct stack ELEMENT;
typedef ELEMENT *POINTER;
void push(POINTER *Top, stackitem a)
/* Put item a into the top of the stack */
{
POINTER temp;
temp = malloc(sizeof(ELEMENT));
temp->d = a;
temp->next = *Top;
*Top = temp;
printf("Insert element %c\n", temp->d);
}
void push_string(POINTER *Top,char *string)
/* Push a string of characters into a stack. */
{
char *tmp = malloc(strlen(string) + 1);
if (tmp)
strcpy(tmp, string);
push(&Top,tmp);
我在另一个 SO 线程上找到的第二个函数的一部分。 这就是我使用它的方式:
main()
{
POINTER top;
top= (POINTER) NULL;
stackitem A='A';
stackitem B='B';
char *C="12345";
push_string(&top,C);
print_stack(top);
return 0;
}
如何将字符串添加到堆栈中? push 函数用于将字符推送到堆栈上,但我无法让它推送整个字符串。
【问题讨论】:
-
显然,您的堆栈(您未显示其定义)可以保存字符,但不能保存字符串。将整个字符串压入堆栈的一种方法是压入所有字符,因此不要尝试压入
"ABC",而是遍历字符串并压入'A'、'B'和'C'。 -
ive 更新了我的帖子的定义...不会循环遍历字符串将每个字符作为单独的元素推送到堆栈上吗?这是针对一些 uni 任务的,我相信其目的是将字符串推入堆栈
-
typedef ELEMENT *POINTER;被认为是一种不好的做法。使用ELEMENT*以便读者可以看到它是一个指针。 -
这段代码没有警告吗?在我看来,编译器会立即发现问题!确保启用编译器的警告(例如
-Wall -Wextra -pedantic与 gcc/clang) -
@william_ 函数 push_string 没有意义。
标签: c struct stack c-strings function-definition