문자자르는 함수..함 봐주세요.
글쓴이: pogs / 작성시간: 금, 2003/08/08 - 9:41오전
#include <stdio.h>
char *strparser(char *src, int pos)
{
char des[8];
int i;
for(i=0;i<pos;i++)
{
des[i]= src[i];
}
printf("des [%s]\n", des);
return des;
}
main()
{
strparser("12345678",5);
}
위 프로그램은 pos까지 짤라서 반환하는 함수인데요.
des[i]= src[i]; --> des[i] =src+i 로 바꾸면 안되네요... 이유좀 알수 있을까요? 제가알기로는 src+0은 1 src +1은 2 이런식으로 되는걸로 알고 있는데...
다름과 같은 메시지가... warning: improper pointer/integer combination: op "="
Forums:
문제가 있네요.
des[i] =src+i
는 아니구요 des[i] = *(src+i)
또한 char des[8] 은 stack에 있기 때문에, 이 값을 리턴하면 문제가 있습니다. 리턴된다음 곧장 보면 되는것 처럼 보이지만, 다른 함수를 호출한 다음 보면 값이 깨지죠...
--
Life is short. damn short...
테스트 한번 해보세요..
src + 1이 아니라 *(src + 1)을 하면 올바른 결과가 나와요..
이건 포인터 사용에 대한 기초적인 개념인데요..
저도 포인터를 항상 사용함에도 불구하고 자주 실수하죠..
연산자 우선순위 때문에.. 저렇게 괄호로..
이래저래 테스트 해보면 저렇게 하면 올바른 값이 나옵니다.
*(src +1)의 의미는 *src의 주소값을 1씩 증가.. 바로 님이 원하던
의미이죠.. 포인터에 대해 기초부분을 조금만 보시면 금방 이해
되실겁니다.. 글면 오늘도 즐플~
컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러
[quote="pogs"]des[i]= src[i]; --> des
OR 이렇게 하면은 원하는 결과를 얻을 수가 있습니다.des = src + i;
이게 문법적으로 맞는 겁니다. 그리고 char *strparser(char *src, int pos); 이 함수 자체가 잘 못 됐네요... 이건 그냥 단순히...<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
앗.. 뒷북 쳤네요..
제가 글을 올리는 사이 저보다 간발의 차이로 먼저 올리신 분이..
근데... 서지훈님이 확실한 답변을 또 간발의 차이로 뒤에 올리시공..
거의 채팅수준(?)의 리플이군요.. 쩝~
컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러
......ㅋㅋ
그렇네요. 제가 코드도 안보고... tyep만 맞추느라. 제가 올린거 무시하시길. ㅋㅋ
--
Life is short. damn short...
저도 그냥 끼워 맞추기식의...
제꺼도 무시하세요.. 도움 드리고 싶었는데요.. 실수좀 했네요
컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러
[code:1]des = src + pos;[/code:1]
프로그래머가 의도한 값이 나올까요..;
(만약 문자열 뒤쪽을 끊을려고 했다면)
마지막에 '\0' 종료문자를 추가해주면 좋겠네요.
[quote="서지훈"][quote="pogs"]des[i]= src[i
char des[128];
strncpy(des, src, pos);
des[pos] = '\0';
이게 처음 함수랑 같은거 아닌가요? :shock:
----
Let's shut up and code.
[quote="borishim"][code:1]char des[
strncpy함수는 대상공간이 원시공간보다 클 경우엔 종료문자를 처리해줍니다..
[quote="bluemoon"][quote="borishim"][cod
char *strncpy(char *dest, const char *src, size_t n);
src의 첫번째 n바이트 안에 null byte가 있을 경우에 null-termination 처리를 해 줍니다. 즉, dest이 src보다 클 경우가 아니라, n이 src보다 큰 경우라는 이야기지요. 가령 다음의 코드는
보통 Segmentation fault를 일으킵니다.
뭐 중요한 건 아닙니다. :oops:
----
Let's shut up and code.
그렇군여.
저도 strncpy가 null을 추가 해주는 줄 알았는데
단순히 src의 null를 그대로 옮겨준것 뿐이었군여..
덕분에 착각하기 쉬운거 오늘 다시 정리했네여.
댓글 달기