Я вижу, что теперь ОП изменил описание поведения на нечто совершенно иное, поэтому мое объяснение больше не относится к его коду.Тем не менее, замечания, которые я высказал в отношении функций с переменными числами, остаются в силе.
Этот код приводит к аннулированию стека (или что-то подобное), поскольку вы не смогли объявить функцию printf
.printf
- это так называемая переменная функция, она принимает переменное число аргументов.В языке Си это [почти] всегда было обязательным для объявления функций с переменными числами перед их вызовом.Практическая причина этого требования заключается в том, что для функций с переменным числом аргументов (и часто это будет необходимо) требуется особый подход к передаче аргументов.Его часто называют соглашением о вызовах .Если вы забудете объявить функцию с переменным числом перед вызовом, компилятор до C99 предположит, что это обычная невариационная функция, и вызовет ее как обычную функцию.Т.е. он будет использовать неправильное соглашение о вызовах, что, в свою очередь, приведет к аннулированию стека.Все зависит от реализации: некоторые из них могут даже работать "нормально", некоторые будут зависать.Но в любом случае у вас абсолютно есть для объявления функций с переменным числом перед их вызовом.
В этом случае вы должны включить <stdio.h>
перед вызовом printf
.Заголовочный файл <stdio.h>
является стандартным заголовком, который содержит объявление printf
.Вы забыли это сделать;отсюда и ошибка (скорее всего).Невозможно быть на 100% уверенным, поскольку это зависит от реализации.
В противном случае ваш код верен.Код странный, поскольку вы передаете j
в printf
без указания спецификатора формата, но это не ошибка - printf
просто игнорирует дополнительные переменные аргументы.Ваш код должен печатать Abc
в любом случае.Добавьте #include <stdio.h>
в начале вашего кода, и он должен работать нормально, если он делает то, что вы хотели.
Опять же, этот код
#include <stdio.h>
int main()
{
int j=97;
char arr[4]="Abc";
printf(arr,j);
return 0;
}
странный,но совершенно правильная C-программа с идеально определенным выводом (хотя было бы неплохо добавить \n
в конце вывода).