繁体   English   中英

数据结构:当我尝试将数据弹出堆栈时,我的程序崩溃了

[英]Data Structures: My program crashes when I try to pop my data out of the stack

我正在开发一个专注于堆栈的Data Structures任务,我需要帮助。 如果它们是使用堆栈的回文,我应该比较两个字符串。

我对这个程序的想法是fgets()一个字符串。 清除空格并将其存储在char“o”中,然后将每个char压入堆栈,将它们弹出到另一组char“r”中并检查是否(o == r)。

但是,当我编译时,我得到一个警告,该程序正常工作。 进一步深入我的程序,当我尝试弹回我的char时,程序崩溃了。

我很好奇是什么导致我的代码中的警告以及如何解决它。 最重要的是,我想了解当我将数据从satck中弹出时导致程序崩溃的错误。

警告:

main.c:28:17: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
       dataPtr = (char*)s[c];

崩溃时得到的结果:

Segmentation fault (core dumped)

我附上的代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include "stacksADT.h"

int main (void)
{
  char s[50];
  char o[50];
  char r[50];

  STACK* stack;
  char* dataPtr;

  stack = createStack();

  printf("Enter the string to compare:\n");
  fgets(s,50, stdin);

  for(int c = 0; c < strlen(s); c++){
    if( s[c] != ' ' ){
      dataPtr = (char*)s[c];
      printf("%s", dataPtr);
      pushStack( stack, dataPtr );
    }
  }

  for(int c = 0; c < strlen(o); c++){
    printf("%s", (char*)popStack(stack));
  }

} // main

我的popStack()操作:

void* popStack (STACK* stack)
{
  // Local Definitions
  void* dataOutPtr;
  STACK_NODE* temp;

  // Statements
  if(stack->count == 0)
    dataOutPtr = NULL;
  else
  {
    temp = stack->top;
    dataOutPtr = stack->top->dataPtr;
    stack->top = stack->top->link;
    free(temp);
    (stack->count)--;
  } // else
  return dataOutPtr;
} // popStack

s[c]返回一个char。 你只需将它转换为指针。 分配给指针char *dataPtr是错误的,你需要传递一个引用。 使用以下两种方法之一:

  • dataPtr = &(s[c])
  • dataPtr = s+c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM