![](/img/trans.png)
[英]Program crashes when I try to move my player across the screen on a simple map in C
[英]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.