어제 C를 배우기 시작 했으므로 사소한 질문 일 수 있지만 여전히 이해가 가지 않습니다. (또는 후) 문자열을 concating 때두 개의 문자열을 작은 배열로 연결하는 경우 segfault
#include <stdio.h>
#include <string.h>
int main()
{
char text[8];
strcpy(text, "Lorem ");
puts(text);
strcat(text, "ipsum!");
puts(text);
return 0;
}
이 세그먼트 오류가 발생합니다 :
의 나는 다음과 같은 코드가 있다고 가정 해 봅시다
. 그러나text
의 크기를 8에서 9로 변경하면 그렇지 않습니다.
내가 틀렸다면 정정 해줘 그러나 이것은 옳은 생각입니다하십시오 : - "! ipsum의"
"LOREM"(\ 0 또는 7) 크기 6
- 크기 6 (또는 7이 \ 0)
"Lorem ipsum!" - 크기 12 (또는 13이 \ 0)
그럼 8/9은 어디서 나왔습니까? 이 문제는 strcat
의 구현으로 인해 발생합니까? 아니면 최소 배열 길이 같은 것이 있습니까? 아니면 어리 초한 초보자의 실수를 저지르고 있습니까?
미리 감사드립니다.
[정의되지 않은 동작 (http://en.wikipedia.org/wiki/Undefined_behavior) –
실행 Valgrind의에서이 (http://valgrind.org) 당신은 문제가 모두 있다는 것을 볼 수 있습니다 사례. – alk
그리고 "8/9는 어디서 왔는가"라는 질문에 대한 답은 특정 컴파일러가 8 바이트 청크로 메모리를 할당 할 가능성이 있습니다. 따라서 텍스트 [8]은 8 바이트를 할당합니다. text [9]는 최대 16 바이트를 반올림합니다. 물론 이것은 구현에 따라 다르며, 항상 이것을 수행하는 컴파일러를 믿지 않아야합니다! –