2016-07-20 2 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

이것은 (a) 프로그램을 컴파일하고 연결하는 것이 아니라, 당신도 그것을 실행하고 있습니다. 그리고 (b) 당신의 프로그램이 운좋게도 OS에 의한 조기 종료를 야기하는 * 정의되지 않은 동작 *을 호출하고 있습니다. 방금 게시 한 코드가 바로 그 코드입니다. 그 코드는 [C 언어에 대한 좋은 책] (https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list?s=1|3.4128)이 건전한 투자라고 제안합니다. – WhozCraig

답변

1

이가 널 (NULL) 종료에 도달했을 때 당신이 char 아닌 pointerchar에 printf와 제공되기 때문에 printf가 주어진 주소와 끝에서 인쇄를 시작된다는 것을 의미합니다, 그것은을 사용하려고 값은 a로 작성되어 인쇄를 시작합니다. 어드레스가 '쓰레기 랜덤 64 비트 시스템에 8 바이트이므로, 기본적의 printf'A '의 값을 취하고, 다음 7 바이트 (반면

a

1 바이트의 공간을 차지 숯불 인 ') 주소로 사용하여 인쇄를 중지합니다.

그게 가끔은 당신이 말한 것처럼 작동합니다, 때로는 그 임의의 주소가 인쇄를 시작하는 괜찮아요,하지만 때로는 당신이 OS 또는 커널에 의해 사용되는 메모리 영역과 같은 액세스 권한이없는 주소입니다.

a char *하지 char을해야 문제를 해결하고, 문자열을 할당합니다.

-1

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

에 코드를 변경

하고 그것을 잘 작동합니다. 당신이 %s와의 printf를 호출하면

+0

코드가 하나의 컴파일러 경고를 수정하더라도 코드가 수정되지 않습니다. – dvhh

+0

지금까지 큰 따옴표를 알아 채지 못했습니다. 그것도 고정시켰다. –

+0

하지만 의도 한 코드가 맞았습니까? 어쩌면 @ gayantha-akalanka는 한 문자 만 아닌 문자열을 인쇄하려고했습니다. – dvhh