Строка C 34: Ошибка конфликтующих типов для print в пользовательской функции print

в пользовательской функции 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;
}
#
Источник
  • 3
    Почему используются ваши собственные объявления имен стандартных функций C?
  • 1
    пожалуйста, не помечайте c и c ++, если вы действительно не используете оба языка. Приведите минимальный воспроизводимый пример
  • 3
    Не «исправляйте» проблемы в своих вопросах. Это сделает вопрос и все ответы бесполезными.
  • 0
    Кроме того, задавая вопросы о сообщениях о сборке, скопируйте и вставьте в вопрос полный и полный вывод сборки в виде текста . И добавляйте комментарии к строкам, где вы их получили. И вы должны получать много сообщений.
  • 0
    Что касается вероятной проблемы в заголовке (который на самом деле должен быть кратким изложением вопроса внутри основного текста), вы, похоже, забыли, что все символы должны быть объявлены перед их использованием. Но это не единственная проблема в вашем коде.
  • 2
    Функция print , по-видимому, не была объявлена при ее вызове (или вы упустили соответствующие части своего кода). Решите эту проблему, заранее объявив прототип функции. Изучите, как работают функции в вашей любимой книге C.
  • 0
    Я изменил печать и определил ее перед функцией eval. Я не получаю сообщение об ошибке, но ничего не печатается. Если я хочу что-то вернуть, нужно ли мне это ловить, когда print вызывается из eval?
  • 1
    У вас есть ответ на начальную версию вашего кода. Если вы хотите обсудить код, включающий этот ответ, задайте новый. Изменение вопросов таким образом, чтобы существующие ответы были признаны недействительными, не приветствуется.
  • 0
    Проблема, с которой я столкнулся, была связана с отредактированной версией кода. Я загрузил не тот. Также в начальной версии я все еще получаю ошибку после внесения необходимых изменений. Внутри функции print ничего не печатается.
Codelisting
за 3 против

Этот:

ast print(ast result)
{
    printf("here");
    printf("%s\n",*result);
}

данный

typedef char* ast;

неопределенное поведение. Ты говоришьprintf() ожидать строку, затем передать один символ путем разыменованияresult .

Вероятно, это должно быть

printf("%s\n", result);

но я не тестировал.

  • 0
    По ошибке я загрузил неправильный код. Даже с printf ("% s \ n", результат); Я получаю ту же ошибку
  • 1
    @VrajShah При создании минимально воспроизводимого примера убедитесь, что он только воспроизводит проблему, о которой вы действительно спрашиваете. Например, фактически построив его (с включенными дополнительными предупреждениями).
  • 0
    @Someprogrammerdude Спасибо за ссылку. Я буду помнить об этом, когда опубликую в следующий раз
Смежные вопросы
Codelisting
Популярные категории
На заметку программисту