Я работаю над назначением структур данных, сосредоточенным на пакетах, и мне нужна помощь. Я должен сравнить две строки, если они являются палиндром, используя стек.Структуры данных: моя программа сработает, когда я пытаюсь вытащить данные из стека
Мое представление об этой программе - fgets() строка. Очистите пробелы и сохраните их в символе «o», затем нажмите каждый символ в стек, вытащите их в другой набор символов «r» и проверьте, есть ли (o == r).
Однако, когда я компилирую, я получаю предупреждение, которое программа отлично работает с ним. Далее в мою программу, когда я пытаюсь вытащить свой символ обратно, программа вылетает.
Мне любопытно, что вызывает это предупреждение в моем коде и как его исправить. Самое главное, что я хочу понять, что я делаю неправильно, чтобы вызвать сбой моей программы, когда я вывожу данные из сатц.
Предупреждение:
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
не игнорировать предупреждение: 'DataPtr = (символ *) s [с];' неправильно. Это должно быть 'dataPtr = s + c;' –
попытаться прокомментировать (temp) и выполнить, что случилось? – Aubin
Здесь 'dataPtr = (char *) s [c];' удаляет бросок и исправляет код. Присвоение значению символа 'char' (' s [c] ') указателю (' dataPtr') не имеет никакого смысла. – alk