13분경 질문
https://www.inflearn.com/questions/445486
이 질문의 답변에서
strncpy는 복사 하려는 공간이 복사 대상보다 클 경우 null value로 채워주는 것으로 알고 있습니다.
라고 말씀을 해주시는데
그러면
char dest[100] = ""; // make sure memory is enough
char source[] = "Start programming!";
strcpy(dest, source);
strncpy(dest, source, 5);
이걸 실행 했을 때 Start만 출력이 되어야 하는 거 아닌가요?
근데 교수님은 Start가 복사 될 때 복사 될 문자열에 NULL 캐릭터가 없어서
위의 예제를 실행하면 Start programming!가 전부 출력 된다고 말씀하셨고 실제로 그렇게 됐잖아요
교수님 말씀이 맞는건지 아니면 제가 답변자님 답변을 잘못 이해한 것인지 잘 모르겠네요
source가 들어갈 dest에 이미 데이터가 들어가 있어서 나머지 공간을 NULL 캐릭터로 채워주지 않은거라고 해석해도 될까요?
그리고 Start programming!이 전부 출력되는 이유를 제가 강의를 듣고 나름대로 설명해 봤는데 이게 맞는지 모르곘네요.
위의 예제를 실행시키면 "Start”만 출력을 할 것 같지만
"Start programming!" 전부를 출력하는데 그 이유는
strncpy() 함수에서 원본을 복사해서 넣을 때 복사본의 맨 마지막에
NULL 캐릭터를 추가해주지 않고 문자열을 복사해서 넣어줄 공간만 신경 쓰지 그 외의 공간은 신경 쓰지 않기 때문이다.
(dest에서 Start가 들어갈 공간만 신경 쓰지 나머지 공간은 신경 쓰지 않는다는 뜻)
라고 설명을 해봤어요
답변 1
2
안녕하세요, 질문&답변 도우미 Soobak 입니다.
교수님의 말씀이 정확합니다.
이전 질문&답변 도우미분의 말씀도 맞지만, 질문과 연관되지 않습니다.
강의에서 교수님의 설명처럼, strcpy() 함수와 strncpy() 함수는 문자열 뿐만 아니라 메모리와 관련된 동작을 위해서도 사용되는 경우가 있기 때문에, 복사 후 남은 dest 의 부분에 '\0' 을 자동으로 추가해주지 않습니다.
char dest[100] = "";
char source[] = "Start Programming!";
strncpy(dest, source, 5);
puts(dest);: strncpy() 가 수행된 후 Start 까지만 정상적으로 출력된 이유는,
이미 char dest[100] = ""; 부분에서 배열의 나머지 부분이 '\0' 문자들로 초기화되어있었기 때문입니다.strncpy() 함수가 '\0' 문자를 추가해준 것이 아닙니다.
strncpy는 복사 하려는 공간이 복사 대상보다 클 경우 null value로 채워주는 것으로 알고 있습니다.
: strncpy() 함수에서 '복사 하려는 공간의 크기' 는 인수로 전달되는 n 입니다.
'복사 대상의 크기' 는 예시 코드에서 source 배열의 크기 입니다.
따라서, strncpy(dest, source, 5); 의 경우와는 다른 경우에 대한 설명입니다.
strncpy() 함수는 오직 n 이 source 의 길이보다 클 때의 경우에 대해서 남은 부분을 '\0' 으로 채웁니다. n 이 source 의 길이와 같거나 작은 경우에는 dest 의 나머지 부분에 대해 아무런 조치를 취하지 않습니다.
Export template 안됨
1
26
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
56
3
main 함수에서 왜 int만 선언이 되는걸까요
1
57
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
55
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
49
1
프로토타입과 함수간의 인자 불일치
1
73
2
12.12 헤더 관련 질문
1
60
2
Visual Studio Community 2026 사용 문의
1
138
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
61
2
getchar(), putchar()
1
94
3
강의자리ㅛ
1
80
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
114
2
소스파일안에 여러 파일
1
76
2
F5와 F7의 차이
1
79
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
70
1
Step over 기능 문의
1
53
2
2.6 강의 따옴표 출력 규칙 문의
1
76
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
61
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
65
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
54
2





