strcat()와 관련된 질문입니다.
글쓴이: ratmhun / 작성시간: 일, 2003/11/30 - 1:39오후
안녕하세요. 프로그래밍 초보입니다.
A Book on C 6장 43번 문제인데요.
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p1 = "abc", *p2 = "pacific sea";
printf("%s %s %s\n", p1, p2, strcat(p1, p2));
return 0;
}
예상한 결과는...
abc pacific sea abcpacific sea
그런데 이렇게 나오지 않고 세그멘테이션 오류가 발생하는 군요.
무엇이 문제인지 잘 모르겠습니다.
Forums:


p1이 p2까지 담을 수 있는 충분한 공간이 있어야 되는 걸로알고
p1이 p2까지 담을 수 있는
충분한 공간이 있어야 되는 걸로
알고 있습니다...
[code:1]int main(void) {
int main(void) { char *p1 = "abc", *p2 = "pacific sea"; printf("%s %s %s\n", p1, p2, strcat(p1, p2)); return 0; }strcat 를 쓰려면 덧붙여지는 문자열 (p1) 쪽에 충분한 공간이 있어야 합니다.
그런데 코드에서 공간을 선언하지 않고 포인터만 선언하였으므로 당연히 에러가 납니다.
이렇게 바꿔보세요.
답변 감사합니다.
관심 가져주셔서 감사드립니다. 이걸 생각 못했네요.
char *strcat(char *s1, register const char *s2) { register char *p = s1; while (*p != '\0') ++p; while (*p++ = *s2++) ; return s1; }calloc() 혹은 malloc() 를 이용해서 p1의 크기를 잡아준 뒤에 p2를 붙이는 것도 가능하겠군요.
한글 맨페지에 보면[quote]dest문자열은 결과를 위해 충분한 공
한글 맨페지에 보면
얼마나 충분해야하는지 처음쓰는사람은 모르겠네요;;;
이렇게 쓰시면 되겠네요.
char arr1[50] = "abc "; char arr2[] = "pacific sea"; strcat(arr1, arr2);혹은
char *p1 = "abc "; char *p2 = "pacific sea"; char *p3; p3 = (char *)malloc((strlen(p1) + strlen(p2) + 1) *sizeof(char)); strcpy(p3, p1); strcat(p3, p2);답변 감사합니다.
답변 감사드립니다.
덕분에 strcpy()에 대해서 많은 것을 알게 되었습니다.
Re: strcat()와 관련된 질문입니다.
일반적으로 아래의 코드가 컴파일 되면 "abc" 는 text 영역에 저장됩니다.
거기에 write를 할려고 했기 때문에 세그먼트폴트 난겁니다.
char p1[] = "abc", p2[] = "pacific sea";
라고 하면 예상했던 결과가 나옵니다.
screen + vim + ctags 좋아요~
[quote="김충길"]일반적으로 아래의 코드가 컴파일 되면 "abc"
p1에 충분한 공간이 할당되어 있지 않기 때문에 여전히 문제가 있는 코드입니다.
어찌나 졸린지..~~
댓글 달기