C language - 4. string function(문자열 함수)

<string.h>의 헤더파일에는 문자열과 관련되있는 함수들을 정의하고 있습니다.


1. 문자열 복사

#include <stdio.h>
#include <string.h>
void main()
{
char str1[30] = "String function";
char str2[30];
char str3[10];
strcpy(str2, str1); // str1의 문자열을 str2에 복사
puts(str2);
strncpy(str3, str1, sizeof(str3)-1); // str1의 문자열을 지정된 크기만큼 str3에 복사
str3[sizeof(str3)-1] = 0; // 마지막 열에 null을 삽입
puts(str3);
}
view raw string copy hosted with ❤ by GitHub
 문자열을 복사하는 함수에는 strcpy()와 strncpy()가 있습니다. strncpy() 함수에서 str3보다 1작은 크기만큼 복사해야하는데 문자열에는 마지막에는 반드시 null문자(\0)가 들어가야합니다.

문자열의 출력함수는 null문자가 나타날때까지 출력하는데 null문자를 넣을 공간을 만들어주지 않으면 출력함수는 null문자를 찾아 엉뚱한 영역의 값까지 출력해버립니다. 그러므로 마지막 열의 null값을 넣어 주어야 합니다.

null값을 무시하여 짠 출력결과
null값을 넣어준 출력결과


2. 문자열 덧붙임

#include <stdio.h>
#include <string.h>
void main()
{
char str1[30] = "String";
char str2[30] = "function";
char str3[30] = "4 number : ";
char str4[30] = "1234567890";
strcat(str1, str2); // str1 뒷부분에 str2를 덧붙임
puts(str1);
strncat(str3, str4, 4); // str3 뒷부분에 str4를 4번째 문자까지만 덧붙임
puts(str3);
}
view raw string cat hosted with ❤ by GitHub
문자열을 덧붙이는 strcat()와 strncat()입니다. 문자열을 덧붙일때는 아래의 그림과 같이 null문자의 자리부터 덧붙여집니다.
strncat()함수는 덧붙일 문자열에서 원하는 수만큼만 덧붙게 해줍니다.


3. 문자열 비교

#include <stdio.h>
#include <string.h>
void main()
{
char str1[30] = "String";
char str2[30] = "Stdio";
if(!strcmp(str1, str2))
{
printf("두문자는 완벽일치");
}
else if(!strncmp(str1, str2, 1)) // 1만큼만 분석하여 문자열을 비교
{
printf("두문자는 최소 하나 일치");
}
else
{
printf("두문자는 불일치");
}
}
view raw string compare hosted with ❤ by GitHub
문자열의 비교는 두 문자열을 한 문자씩 비교하여 결정합니다. 비교했을 때 반환되는 값은 아래의 표와 같이 나오게 됩니다.
이 때 문자열의 크고 작음을 비교하는 기준은 아스키코드값을 토대로 일어나게 됩니다. 예를 들어 문자열 "ABC"와 "ACD"를 비교할때 먼저 A는 서로 같기 때문에 다음 문자로 넘어갑니다. B와 C를 비교할때는 아스키 코드값이 C가 더 크므로 strcmp 함수는 0보다 큰 값을 반환하게 됩니다.


4. 문자열 길이

#include <stdio.h>
#include <string.h>
void main()
{
char str[30] = "String";
int length;
length = strlen(str);
printf("문자열의 길이 : ", length);
}
view raw string length hosted with ❤ by GitHub
문자열의 길이를 반환하는 strlen() 함수는 문자열의 null값을 제외한 길이를 반환합니다.
위의 예제에서 문자열은 7의 공간을 차지하고 있지만 null값을 제외하여 6의 값이 반환됩니다.


5. 문자열 분리

#include <stdio.h>
#include <string.h>
void main()
{
char str[30] = "String function";
char *pstr;
pstr = strtok(str, " ");
printf("%s\n%s\n", pstr, str);
pstr = strtok(NULL, "c");
printf("%s\n", pstr);
}
view raw string tokenize hosted with ❤ by GitHub
strtok() 함수는 매개변수로 문자열과 분리하는 구분자를 받습니다. 분리하는 구분자는 큰따옴표("")안의 문자 혹은 띄어쓰기로 해당되는 문자의 이전 문자까지만을 반환합니다. 이후 매개변수로 받았던 문자열은 처음 자른 문자열로 바뀌고 자르고 남은 문자열은 NULL에 전달되며 더이상 없다면 NULL을 반환합니다.

출력결과


Related Posts:

  • C language - 3. file I/O(파일 입출력) 파일 입력함수에는 getc(), fgetc(), fgets(), fscanf(), fwrite()가 있고 파일 출력함수에는 putc(), fputc(), fputs(), fprintf(), fread()가 있습니다. 1. 텍스트 파일 입출력 #… Read More
  • C language - 2. standard I/O(표준 입출력)1. 표준 입출력  C언어에서 입출력 함수는 표준 입출력함수와 파일 입출력함수로 나뉩니다. 파일 입출력은 외부에서 값을 입력받거나 저장하는 반면에 표준 입력함수는 일반적으로 키보드의 입력을 받고 표준 출력함수는 일반적으로 모니터에 출력을 하게됩니다. 표준… Read More
  • C language - 1. primitive data type(기본 자료형) 1. 변수란?  프로그래밍 언어에서 값을 저장하거나 저장된 값을 읽거나 다른 값을 넣을 수 있는 공간을 할당받는 것을 변수라고 합니다. 이러한 변수들의 크기를 크게 잡으면 광활한 범위의 값을 저장할 수 있겠지만 작은 값을 필요로 하는 변수에 비해 훨씬 큰… Read More
  • C language - 6. pointer(포인터)1.  메모리와 주소 컴퓨터의 메인메모리는 1byte 단위로 각각 주소가 16진수의 고정된 값이 배정되며 오른쪽 그림을 예를 들어 int(4bytes)형 변수 a를 선언 한다고 했을 때 임의의 연결된 4bytes의 공간에 int형 변수 a가 배정되게 됩니다.… Read More
  • C language - 4. string function(문자열 함수)<string.h>의 헤더파일에는 문자열과 관련되있는 함수들을 정의하고 있습니다. 1. 문자열 복사  문자열을 복사하는 함수에는 strcpy()와 strncpy()가 있습니다. strncpy() 함수에서 str3보다 1작은 크기만큼 복사해야… Read More