개발의 시작과 끝

2020.05.18 / Day - 35 C언어 문자열, Strcpy, Strncpy 본문

C언어

2020.05.18 / Day - 35 C언어 문자열, Strcpy, Strncpy

개발지혜 2020. 5. 18. 13:07

35일차

  • 12 : 00 ~ 02 : 00 : jsaon공부

 

문자열 변수

char str1[5] = "abcd";

str[0] = 'a';
str[1] = 'b';
str[2] = 'c';
str[3] = 'd';
str[4] = '\0';

요소가 char형인 str이라는 이름의 배열을 선언하고, 대입 연산자 오른쪽에 선언된 문자열을 저장하고 있다.

따라서 str이 저장하고 있는 문자열은 변수가 된다.

 

문자열 상수

char *str2 = "ABCD";

[●] -------------------->[A B C D \n]

포인터                    문자열 상수

대입 연산자의 왼쪽에 char형 포인터를 선언하고, 오른쪽에는 "ABCD"라는 문자열을 선언하고 있다.

이는 포인터 str2를 이용해서 문자열 상수 "ABCD"를 가리키겠다는 의미가 된다.

따라서 str2는 문자열의 첫 문자 'A'를 가리키게 된다. 포인터의 타입이 char*인 이유도 여기에 있다.

 

 

Strcpy

null문자를 만나기 전까지의 문자열을 복사한다.

#include <stdio.h>
#include <string.h>

int main( )
{
	char str1[]="Sample string";
	char str2[40];
	char str3[40];

	strcpy( str2, str1 );
	strcpy( str3, "copy successful" );

	printf( "str1: %s\n", str1 );
	printf( "str2: %s\n", str2 );
	printf( "str3: %s\n", str3 );

	return 0;
}

출력
str1: Sample string
str2: Sample string
str3: copy successful

 

Strncpy

문자열을 일정 길이만큼만 복사한다.

#include <stdio.h>
#include <string.h>

int main( )
{
	char str1[]= "To be or not to be";
	char str2[40];
	char str3[40] = {0,};

	strncpy( str2, str1, sizeof(str2) );

	strncpy( str3, str2, 5 );
	//str3[5] = '\0';

	puts( str1 );
	puts( str2 );
	puts( str3 );

	return 0;
}

출력
To be or not to be
To be or not to be
To be

 

 

참조

- https://mintnlatte.tistory.com/223

- https://shaeod.tistory.com/215

'C언어' 카테고리의 다른 글

2020.05.08 / Day - 26 C언어 반복문  (0) 2020.05.08
2020.05.07 / Day - 25 C언어 기초 출력  (0) 2020.05.07