>> Delete No. 20634 article
No. [질문]또 질문여.. 씨언어 관련!

등록 2001-02-12 16:44:00 By localhost     조회 2
이름 yong    

		 window에서는 tc 2.01로 잘만 되던 프로그램이 리눅스에서 gcc로 컴파일
 한 후 실행하면 "Segmentation fault"라는 오류메세지가 나옵니다.
 의문점은 이들이 컴파일 시에는 전혀 에러 메세지가 나오지 않다가 컴파일
 된 파일을 실행시키면 나온다는 겁니다.
 문제의 프로그램들은 다음과 같습니다.
  먼저 이건 날짜를 넣으면 그 해에 지나간 날수를 출력하고
 햇수와 지나간 날짜를 넣으면 거꾸로 날짜를 출력하는 프로그램임다.
 문제의 'Segmentation fault'가 발생하는 부분은 [[,]]안의 부분입니다.
    #include<stdio.h>
  char *smonth[12]={"January","February","March","April","May","June","July","August","September","October","November",
"December"};  char daytab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
  void day_of_year(int year,int month,int *day){
	int i, leap;
	leap= year%4==0&&year%100!=0||year%400==0;
	for(i=1;i<month;i++) *day+=daytab[leap][i];
	return *day;
	}
  void month_day(int year,int yearday,int *pmonth,int *pday){
	int i,leap;
	leap= year%4==0&&year%100!=0||year%400==0;
	for(i=1;yearday>daytab[leap][i];i++) yearday-=daytab[leap][i];
	*pmonth=i;
	*pday=yearday;
	}
  main(){
	int day,month,year,days,*yday;
	int *pmonth,*pday;
	char t;
	printf("%s%s",*(smonth+1),*(smonth+2));
	printf("If you want know days from date, type 'd',");
	printf("	     and date frem days, type 'm'.");
	scanf("%c",&t);
	switch(t){
		case 'd': goto days;
		case 'm': goto date;
		default : printf("Error : Type d or m");exit(3);
		}
	days:
	printf("Input year, month, and day :");
        [[scanf("%d%d%d",&year,&month,yday);]] <-- 메세지 발생
 	day_of_year(year,month,yday);
	printf("It is %dth day of year %d",*yday,year);
	exit(0);
	date:
	printf("Input year and days :");
	scanf("%d%d",&year,&days);
	month_day(year,days,pmonth,pday);
	printf("The Date is %s  %d, %d",*(smonth+*pmonth-1),*pday,year);
	exit(1);
	}
 
   따라서 'date:'이하부분, 즉 날수를 날짜로 바꾸는 부분은 정상적으로
 돌아갑니다.
     아시는 분은 답변 부탁드리겠습니다. 그럼~--이 곳에 서명을 적어주십시오.
서명? ㅅ ㅓ ㅁ ㅕ
              ㅇ
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved