#include <stdlib.h>
и это должно стать очевидным.
Для уточнения: вы передаете целое число в функцию, которая ожидает указатель, и компилятор не может предупредить вас, потому что вы забыли объявить функцию спрототип.Это является причиной сбоя.
Более того, вы просто неправильно используете atoi
.atoi
анализирует строки , а не отдельные символы.Если вы хотите, чтобы значение символа было цифрой, просто вычтите '0'
:
M = argv[1][1]-'0';
N = argv[1][3]-'0';
На практике вам также следует проверить, что символ на самом деле является цифрой.
Редактировать: Я не помню, чтобы char *a = argv[1][1];
находился в исходном сообщении (возможно, ранние правки не отображаются как правки?), Но любой здравомыслящий компилятор должен выдавать ошибку времени компиляции в этой строке.Целые числа неявным образом преобразуются в указатели на C. Если компилятор позволяет этому обойтись, то включение прототипа для atoi
больше не поможет, поскольку ошибка типа произошла ранее.