в пользовательской функции print, если у меня есть тип возвращаемого значения, как я получаю сообщение об ошибке, как указано в заголовке вопроса. Если я изменю записанный тип на недействительный, он будет успешно работать, но ничего не печатается. Пожалуйста помоги
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "stack.h"
#define IO_SIZE 128
typedef char* ast;
ast fgets(ast str, int str_len, FILE* stream);
ast read(ast input)
{
input[0] = '\0';
fgets(input, IO_SIZE, stdin);
input[strcspn(input, "\n")] = '\0';
return input;
}
ast eval(ast parsed)
{
printf("in eval %s\n",parsed);
if(strcmp(parsed, ":EXIT"))
{
return '0';
}
else
{
print(parsed);
return '1';
}
}
ast print(ast result)
{
printf("here");
printf("%s\n",*result);
}
int main()
{
char my_array[IO_SIZE];
do
{
printf("> ");
read(my_array);
printf("in do while loop %s\n",my_array);
}
while(eval(my_array));
return 0;
}
Этот:
ast print(ast result)
{
printf("here");
printf("%s\n",*result);
}
данный
typedef char* ast;
неопределенное поведение. Ты говоришьprintf()
ожидать строку, затем передать один символ путем разыменованияresult
.
Вероятно, это должно быть
printf("%s\n", result);
но я не тестировал.
print
, по-видимому, не была объявлена при ее вызове (или вы упустили соответствующие части своего кода). Решите эту проблему, заранее объявив прототип функции. Изучите, как работают функции в вашей любимой книге C. Lundin