2016-07-20 4 views
-4

Когда я скомпилирую коды C, я иногда получаю это сообщение об ошибке.Ошибка выполнения при запуске моего кода

Mycode.exe перестал работать ..
Проблема вызвана программа, чтобы остановить работать правильно.
Windows закроет программу и сообщит вам, если доступно решение.

Мой C код:

#include<stdio.h> 

main(){ 
    char a; 
    a="S"; 
    printf("%s",a); 
} 

Так что же является причиной этой проблемы?
Ошибка синтаксиса, ошибка выполнения или по другой причине?

+0

Просьба поделиться вашим кодом или задать вопрос. – Marievi

+0

#include main() { char a; a = "S"; printf ("% s", a); } –

+1

Это означает: (а) вы не просто компилируете и связываете свою программу; вы также запускаете его. И (б) ваша программа вызывает * неопределенное поведение *, которое, к счастью, вызывает досрочное расторжение ОС. Код, который вы только что опубликовали, делает именно это. Этот код предлагает [хорошую книгу на языке C] (https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list?s=1|3.4128) - это надежная инвестиция. – WhozCraig

ответ

1

При вызове Printf с %s это означает, что printf начнет печать по указанному адресу и в конце, когда будет достигнут нулевой терминатор, потому что вы даете Printf char и не pointer к char, он пытается использовать значение, записанное в a, для начала печати.

a является символом занимая пространство одного байта в то время как адрес 8 байт в 64-битной системе, поэтому в основном Printf принимает значение в «а» и следующие 7 байт (которые являются случайным 'мусора ') и пытается использовать его в качестве адреса для остановки печати.

поэтому он иногда работает так, как вы сказали, иногда эти случайные адреса подходят для начала печати, но иногда это адреса, к которым у вас нет доступа к таким областям памяти, которые используются ОС или ядром.

, чтобы решить эту проблему, вам необходимо сделать a в char * и не в char, и назначить его в строку.

-1

Изменить код

#include<stdio.h> 
int main() 
{ 
    char a; 
    a='S'; 
    printf("%c",a); 
    return 0; 
} 

, и он будет работать нормально.

+0

хотя ваш код исправляет одно предупреждение о компиляторе, он не исправляет код – dvhh

+0

Не заметил двойных кавычек до сих пор. Исправлено это также. –

+0

, но вы уверены, что это был предназначенный код? возможно, @ gayantha-akalanka хотел напечатать строку, а не только один символ. – dvhh

Смежные вопросы