본문 바로가기

System Programmings/C

[C] 문자열 복사, 대체, 삽입 (strncpy(), mommove(), memcpy(), strcat(), strncat())

반응형
// 문자열 복사
#include <stdio.h>
#include <string.h>

int main()
{
	char s1[]="abcdefgh"; // *s1 하면 에러
	char s2[]="alphabetagama"; // *s2 해도 가능하다.


	strncpy(s1, s2, strlen(s1)); // s2 문자열을 s1에 복사한다. s1의 길이만큼 복사.
	printf("%s", s1); // 만약 s2가 s1에 복사할때 s2의 길이가 s1의 길이를 초과해서
	// 복사하면 에러가 생긴다.
	
	return 0;
}


// 문자열 대체 memmove() or memcpy() 함수

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

int main()
{
	char s1[]="abcdefg";
	char s2[]="012";
	memmove(s1+3, s2, strlen(s2)); // s2의 길이만큼 s1 0자리에서 3만큼 떨어진 부분부터 s2로 대체한다.
	printf("%s", s1); // s2의 길이가 s1 이상을 찾지할 경우 에러 발생return 0;      // memmove대신 memcpy를 써도 매개변수가 같아 상관없다.

	return 0;
}

// 문자열 삽입
#include <stdio.h>
#include <string.h>

void insert(char *m ,char *s, int n);
int main()
{
	char s1[20]="abcdefg";
	char *s2="012";
	insert(s1, s2, 3);

	printf("%s", s1);
	return 0;
}

void insert (char *m, char *s, int n)
{
	memmove(m+n, m, strlen(m));
	memmove(m+n, s, strlen(s));
}

// 문자열 연결
#include <stdio.h>
#include <string.h>

void insert(char *m ,char *s, int n);
int main()
{
	char s1[20]="abcde"; // s1에 s2를 연결하려면 s1이 s2를 합친 길이만큼의 배열의 길이가 있어야 한다.
	char s2[]="fghijk"; // s1의 길이가 짧다면 에러가 난다. 마지막 null이 들어가야 하는것도 고려해야 한다.

	strcat(s1, s2);
	printf("%s\n", s1);

	strncat(s1, s2, 1); // strncat는 매개변수가 하나 더 있다. 마지막의 매개변수는 src부분에서 연결할 개수를 지정한다.
	printf("%s", s1);

	return 0;
}


반응형