простая программа C терпит крах, когда управляется

привет я испытываю некоторые затруднения из-за своей программы, когда я управляю им, это терпит крах, и я должен вызвать закрытый, и я испытываю некоторые затруднения при определении того, что вызывает его, любая помощь будет значительно цениться

#include 

void myprint(char let, int num, int line)
{
int countL=0,countT=0,numb, lin;
char abc;
numb=num;
line=lin;
abc=let;

while(countL
1
Кодекс использует неясное изрезывание и там isn' t много усилия сделан плакатом. Почему весь upvotes? What' s настолько фантастический с еще одной ошибкой неинициализированной переменной?
добавлено автор Lundin, источник
Используйте отладчик. Это поможет вам определить местонахождение проблемы в мгновение ока. Но я предлагаю, чтобы вы больше изучили printf требование в петле...
добавлено автор Some programmer dude, источник
Или просто соберите с предупреждениями.
добавлено автор netcoder, источник
Я заметил, что вы не перезагружаете countT=0 после того, как во внутреннем цикле с условием продолжения сделан. таким образом, у последующих линий ничего не будет в них. Не источник вашей катастрофы, но все еще изображенный я упомянул бы его.
добавлено автор Rob, источник

9 ответы

Проблема состоит в том, что вы имеете отдельный символ и пытаетесь напечатать его как последовательность:

printf("%s",abc );

В струнах до последовательности знаков, уволенных нулевым символом \0 . Так этот printf попытается продолжать печатать знаки, пока это не найдет тот пустой байт. Ваша программа, вероятно, продолжает пытаться прочитать память, пока это не находит плохой сегмент, тогда это терпит крах.

Что можно хотеть сделать, вместо этого, просто определяют характер в вашем printf :

printf("%c",abc );

Другая проблема состоит в том, что вам полностью изменили переменные в назначении:

line=lin;
4
добавлено

Попытка, инвертирующая эту инициализацию:

line=lin;

к

lin=line;

Иначе lin не определен.

1
добавлено
printf("%s",abc );

печатает последовательность, ABC - случайная работа.

1
добавлено

Проблема 1:

переменная "lin" не, инициализируют правильно,

line=lin;

так переменная "линия" и "lin" содержит стоимость мусора.

Проблема 2:

изменение

printf (" %s", ABC);

к

printf (" %c", ABC);

поскольку ABC - случайная работа.

1
добавлено

lin has no initialized value.

I think the line that reads line=lin; should be lin=line

1
добавлено

Inside the while(countL loop you never reset the countT variable.

0
добавлено

Попытайтесь заменить

while(countT

с

while(countT
0
добавлено

Вы используете printf неправильно.

Вы прошли %s как формат, который требует случайную работу* как аргумент, не случайная работа .

0
добавлено

ОШИБКА В ВАШЕМ КОДЕКСЕ ПРОСТА
"line=lin" - проблема кода
здесь переменная lin не инициализируется, следовательно держит стоимость мусора
эта стоимость мусора передается переменной линии, и это вворачивает все
я думаю, что надлежащий код был бы lin=line
другая ошибка, которую я нашел, была printf (' %s ', ABC); спецификатор типа неправильный, так как ABC была объявлена как характер, и спецификатор типа должен быть %c
Я также узнал, что неиспользованные аргументы команды args и argv, который может только использоваться, чтобы передать аргумент, бегущий от команды PROMT

0
добавлено