반응형
문자열 내장 라이브러리는 #include <string.h> 을 추가해야 있다.
문자열을 복사하는 내장 함수로는 아래 두가지가 있다.
함수의 원형.
char * strcpy(char * dest, const char * src);
char * strncpy(char * dest, const char * src, size_t n);
간단한 복사 예
#define _CRT_SECURE_NO_WARNINGS // visual studio 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h>
int main()
{
// str1에만 값이 있고, str2는 초기화 값을 넣지 않음.
char str1[20] = "1234567890";
char str2[20];
// str1을 str2에 복사
strcpy(str2, str1);
// 출력확인
puts(str1);
puts(str2);
return 0;
}
(결과) str1의 값이 str2에 복사되어 출력이 가능한 것을 볼 수 있다.
** 그러나 메모리 침범의 결과를 만들 수 있는 strcpy보다, strncpy를 아래와 같이 사용하는게 안정적 코드를 만드는데 좋다.
#define _CRT_SECURE_NO_WARNINGS // fopen 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h>
int main()
{
// str1에만 값이 있고, str2는 초기화 값을 넣지 않음.
char str1[20] = "1234567890";
char str2[20];
// str1을 str2에 복사 * 안전한 사용법 strncpy
strncpy(str2, str1, sizeof(str2));
// 출력확인
puts(str1);
puts(str2);
return 0;
}
반응형
아래 코드는 유도리 있게 딱 할당된 메모리 만큼만 복사하고 마지막에 NULL을 넣어 문자열을 끝낸다.
#define _CRT_SECURE_NO_WARNINGS // fopen 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h>
int main()
{
// str1에만 값이 있고, str2는 초기화 값을 넣지 않음.
char str1[20] = "1234567890";
char str3[5];
// str1을 str3에 복사 * 안전한 사용법 strncpy
strncpy(str3, str1, sizeof(str3) - 1); // 맨 마지막자리만 빼고 복사를 하라! (Null이 들어갈 공간 마련하기 위해)
str3[sizeof(str3) - 1] = 0; // str[5-1] = str[4], 즉, 문자열의 마지막 자리에 0을 대입. 문자열을 끝냄.
// 출력확인
puts(str1);
puts(str3);
return 0;
}
(결과)
반응형
'C언어 \ C++' 카테고리의 다른 글
[C언어] 두 문자열(string)을 합치는 함수 (strcat함수, strncat함수) (0) | 2022.02.27 |
---|---|
[C언어] 두문자열(string)을 비교하는 함수. 서로 같은가 비교 (strcmp 함수) (0) | 2022.02.27 |
[C언어] 문자열(string)의 길이를 보는 함수 (strlen 함수) (0) | 2022.02.27 |
[C언어] 문자열 출력 버퍼(buffer) 비우는 함수 fflush() 함수 (0) | 2022.02.27 |
[C언어] 문자열 입력 버퍼(buffer) 비우기 함수 (0) | 2022.02.25 |