리눅스 중 atoi 함수
#include
#include
#include
int atoi(const char *string);
int myAdd(char *String);
int main(){
//char *argv[] ={ "/bin/ls", "-al", "/tmp", NULL};
char *argv;
printf("first word : ");
argv[0] = getchar();
getchar();
printf("second word : ");
argv[1] = getchar();
printf("%d",myAdd(argv));
// execl( "/bin/ls", "/bin/ls", "-al", "/tmp", NULL);
// execv( "/bin/ls", argv);
// printf( "이 메시지가 보이면 지정된 프로그램이 \
없거나 어떤 문제로 실행되지 못한 것입니다.\n");
}
int atoi(char const *c){
int value = 0;
int positive = 1;
if(*c == '\0')
return 0;
if(*c == '-')
positive = -1;
while(*c) {
if(*c > '0' && *c < '9')
value = value * 10 + *c - '0';
c++;
}
return value*positive;
}
int myAdd(char *String){
int x, y;
x = atoi(String);
String++;
y = atoi(String);
return x + y;
}
위와 같은 c파일을 만들었는데, 첫번째 인수만 입력되고 프로그램이 죽습니다.
first word : '1'
Segmentation fault (core dumped)
위와 같은 모습으로 죽습니다.
디버깅을 돌려보니
기능 메인에서 빠져 나올 때까지 단일 스테핑,
줄 번호 정보가 없습니다.
프로그램이 SIGSEGV 신호로 종료되었습니다. 세그먼트가 잘못되었습니다.
프로그램이 더 이상 존재하지 않습니다.
라는 오류가 나네요..ㅠㅠ
...
char *argv;
포인터만 있고 메모리 할당은 되지 않았어요.
디버깅 정보가 없는 건, 컴파일 할 때 -g 옵션을 안 주신 것 같군요. 개발할 때는 -g3 -O0 를 추가로 주고 컴파일 하세요.
참고해보세요.
구름 IDE 테스트
https://ide.goorm.io
//출력 결과
root@goorm:/workspace/ccc/src# gcc -o m main.c
root@goorm:/workspace/ccc/src# ./m
test0
test1
test2
test3
test4
test5
test0
test1
test2
test3
test4
test5
first word : 4
52 4 34
arr[0] 4
second word : 7
arr[0] 4
arr[1] 7
arr : 4
arr[0] : 4
arr[1] : 7
p[0] : 4
String0 : P
x 4
p[1] : 7
String1 :
y 7
11
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
atoi 함수를 일부러 만든 건가요?
atoi 함수를 일부러 만든 건가요?
표준함수를 안 쓰고?
소스코드에 들여쓰기 적용하려면
https://kldp.org/node/158191
참고하셔요.
컴파일할 때 에러와 경고를 자세히 보려면
gcc -Wall
해 보셔요.
세벌 https://sebuls.blogspot.kr/
댓글 달기