2015-01-11 3 views
-2

나는 C가 매우 익숙하다. 나는 약간의 무언가를 만들려고 노력하고 있지만이 문제를 극복 할 수 없었다.내 프로그램이 왜 비정상입니까?

프로그램의 복사본을 많이 삭제하여 문제의 범위를 좁혔습니다. 왜 충돌이 계속 발생하는지 알고 싶습니다. 감사합니다. . name가 초기화되지 않기 때문에 당신이 scanf에 통과 할 수 있도록, scanf("%s", name); :

#include<stdio.h> 

main() 
{ 
    char *name; 
    printf("\nName your pet.\n"); 
    scanf("%s", name); 

    int hunger = 5; 
    int time = 0; 
    int loop = 0; 
    int day = 1; 
    int happiness = 40; 
    int health = 100; 
    int tired = 0; 
    int option; 

    while(loop < 1){ 
    printf("\n\nDay %i\ntime = %i\n\n",day,time); 
    printf("1 - check\n2 - interact\n3 - go out\n4 - inventory\n\n"); 
    scanf("\n%i",&option); 
     if (option == 1) { 
      if (tired >= 90){ 
       printf("\n %s is struggling to stay awake", name); 
      } 
      else if (tired >= 75){ 
       printf("\n %s looks really tired", name); 
      } 
      else if (tired >= 50){ 
       printf("\n %s is starting to seem a little sleepy", name); 
      } 
      else if ((tired <= 10)&&(hunger < 50)){ 
       printf("\n %s is full of energy", name); 
      } 




      time = time - 1; 

     } 




    time = time + 1; 
    if (10<=time){ 
     day = day + 1; 
     time = 0; 
     tired = 0; 
     printf("Goodnight!/n"); 
     } 
    } 
} 
+0

당신은 충돌하는 곳을 말하지 않았지만 이름을 초기화 했습니까? –

+0

특정 오류를 설명해 주시겠습니까? 무슨 일이 일어나고 있는지 아십니까? 코드를 게시하면 커뮤니티에서 사용자를 위해 디버깅하도록 요청하는 것만으로도 잘 받아 들여지지 않습니다. – paisanco

+0

C를 배우고 싶다면 gdb/valgrind도 배우고 http://c.learncodethehardway.org/를 보시길 권합니다. – roger

답변

1

그것은이 라인에서 충돌합니다.

name 등 초기화. like : char *name = malloc(sizeof(char) * 20);, 이제는 20 자의 문자열이 name에 들어갑니다.

+0

고마워요! 아직 문자열 변수를 완전히 이해하지는 못했지만 그게 효과가 있습니다! – Argy

+0

다행입니다. –

0

코드에서 namechar*입니다. 이는 char에 대한 포인터임을 의미합니다. 메모리를 할당하지 않았거나 포인터에 대한 유효한 주소를 부여했기 때문에 알 수없는 위치를 가리 킵니다. 이 위치에 글을 쓰면 충돌이 발생합니다.

그것을 수정하거나

char *name; 

으로

char name[100]; 

변경 또는 동적으로 suggested by @returntruemalloc를 사용하여 메모리를 할당합니다.

관련 문제