Я новичок и пытаюсь выучить немного c. Я создаю программу для изучения указателя на функции, и при запуске я даю ей три аргумента: int, оператор и другой int. Все отлично работает с%, -, + и /. Но для * у меня есть очень странная ошибка. После большого количества write () везде, чтобы найти, где начинается ошибка, я обнаружил, что это в самом начале: когда я отображаю argv [2] [0], он отображает хороший символ для всего, кроме *, где он показывает "Makefile" ... Я действительно не понимаю эту проблему, и я не нахожу ничего, связанного с * и аргументами ошибок. Я даже не ошибаюсь в указателях или других вещах, так как это с самого начала.
Вот начало кода, так что вы можете увидеть:
#include"header.h"
void ft_putchar(char c)
{
write(1, &c, 1);
}
void ft_putstr(char *str)
{
int i;
i = 0;
while (str[i] != '\0')
{
ft_putchar(str[i]);
i++;
}
}
int main(int argc, char **argv)
{
int a;
int b;
char operator;
ft_putchar(argv[2]); //here it shows "Makefile"...
И некоторый вывод :( сначала представление символа, затем число символов, затем в другой раз представление символа, но дальше в коде, а затем результат * всегда равен 0, потому что он просто выходит из основного после того, как не выполнил никаких следующих условий)
➜ exercice05 ./ft_op 100 / 5
/1/20
➜ exercice05 ./ft_op 100 + 5
+1+105
➜ exercice05 ./ft_op 100 - 5
-1-95
➜ exercice05 ./ft_op 100 % 5
%1%0
➜ exercice05 ./ft_op 100 * 5
Makefile80
Ошибка настолько странная, что я могу только представить, что это что-то очевидное, но я сейчас не знаю, как ее найти. У меня есть Makefile в моем каталоге, но я действительно не вижу, где будет проблема. Я на macOS Catalina, пробовал на bash и zsh, тот же результат. На всякий случай вот make-файл:
TARGET = ft_op
SRC = $(wildcard *.c)
OBJ = $(SRC:.c =.o)
FLAG = -Wall -Wextra -Werror
CC = gcc
$(TARGET): $(OBJ)
$(CC) $(FLAG) $^ -o $@
.PHONY: clean fclean
clean:
rm -f *.o
fclean: clean
rm -f $(TARGET)
Спасибо