我正在进行专注于堆栈的数据结构分配,我需要帮助。 如果它们是使用堆栈的回文,我应该比较两个字符串。
我对这个程序的想法是fgets()一个字符串。清除空格并将其存储在char" o"然后将每个字符串推入一个堆栈,将它们弹出到另一组char" r"并检查是否(o == r)。
然而,当我编译时,我得到一个警告,该程序正常工作。 进一步深入到我的程序中,当我尝试弹回我的字符时,程序崩溃。
我很好奇是什么原因导致我的代码中的警告以及如何修复它。 最重要的是,我希望了解当我将数据从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
答案 0 :(得分:3)
s[c]
返回一个字符。你只需将它转换为指针。分配指针char *dataPtr
是错误的,您需要传递一个引用。使用以下两种方法之一:
dataPtr = &(s[c])
dataPtr = s+c