이 에러는 어떻게 해결하나요? ㅠㅠ
unhandled exception in mydb.exe : 0xC000005:access violation.
해결 방안을 알고 싶어요
오디비씨로 디비 연동해서 삽입 삭제 같은 명령 수행하는 프로그램을 만들고 있습니다. 처음에 사용자로부터 명령을 입력받아서 스위치문 돌려서, 다 만들어논 함수 그대로 호출하고 break;하는데.. 함수 호출하는 부분에서 걸리네요;; 앞에서 함수 선언 한번 더 해주고 메인 뒤에 구현도 했는데.. 뭐가 문제일까요;; 컴파일때는 괜찮은데 실행 시키고 나면 저 부분에서 프로그램 오류 뜨고 디버깅하면 저 에러가 뜨네요... 아래는 혹시나.. 해서.. 소스 올립니다.
int main(void){
디비연결하고
if(Conn){//커넥션 성공시
printf("Command : ");
scanf("%s", &com);
command=toupper(com);//입력 커멘드를 대문자로 변환. 소문자로 입력하든 대문자로 입력하든 똑같이 수행되도록 하기 위함
switch(command){//커멘드 첫 글자가 모두 다르므로 첫글자만 보고 판단한다.
case 'C' :
create(); <--바로 요 부분이... 다른함수도 마찬가지로 호출하는 부분에서 걸리네요; ㅠㅠ 함수로 넘어가지도 못하고;;
break;
..........
}
void create(char command){
int ci = 1;
int cj=1;
char msg = "create";//com의 값이 C 한글자일 경우가 있으므로 suc_or_fail 함수에 com이 아닌 msg를 넘긴다.
char *tname, *cname, *ctype, *cconst, *tconst; //임시로 입력값을 저장하기 위한 변수
const char s1 = "create table ";
strcpy(sql, '\0');
strcpy(sql, s1);
printf("Command : %d\n, msg");
printf("Table Name : "); //테이블 명을 입력받는다.
scanf("%s\n", &tname);
strcat(sql, tname);
strcat(sql, "(");//입력받은 문자를 sql 배열에 넣는다.
do{//cname이 널값이 아닐때까지
printf("Column [ci] name :"); //컬럼명을 입력받는다.
scanf("%s\n", &cname);//cname에 저장
if((strcmp(cname, 'end'))==0 || (strcmp(cname, 'END'))==0){//cname에 저장된 값이 end이면
do{
printf("Table Constraint [cj] :");//제약조건을 입력받는다.
scanf("%s", &tconst);
if(strcmp(tconst, 'end')==0){//tconst가 end이면
strcat(sql, ");"); //sql 배열에 );를 넣어 create table 명령의 끝을 알린다.
break;//루프를 빠져나온다.
}
strcat(sql, tconst);//sql 배열에 tconst 값을 넣는다.
strcat(sql, ",");//끝에 , 를 넣어 한 문장의 끝을 알린다.
tconst = '\0';//다음 입력을 위해 초기화.
cj++;
}while(tconst!=NULL);
}
strcat(sql, cname);//입력받은 컬럼명을 sql 배열에 넣고
strcat(sql, " ");//공백을 하나 추가한다.
cname = '\0'; //다음 입력을 위해 초기화
printf("Column [ci] type :");
scanf("%s\n", &ctype);
strcat(sql, ctype);//sql 배열에 ctype 값을 넣는다.
strcat(sql, " ");
ctype = '\0';//다음 입력을 위해 초기화
printf("Column [ci] constraint :");
scanf("%s\n", &cconst);
strcat(sql, cconst);//sql 배열에 ccons 값을 넣는다.
strcat(sql, ","); //,를 넣어 한 문장이 끝남을 알린다.
cconst = '\0';//다음 입력을 위해 초기화
ci++;
}while(cname != NULL);
suc_or_fail(sql, msg);
}
댓글 달기