웹사이트 검색

Linux C 프로그래밍 자습서 9부: 문자열


진행 중인 이 C 프로그래밍 튜토리얼 시리즈에서 우리는 이미 문자 배열의 개념을 다뤘습니다. 문자 배열과 밀접한 관련이 있는 것은 여기에서 잘 논의되고 있는 문자열의 개념입니다.

문자열은 한 가지 주요 영역에서 문자 배열과 다릅니다. 문자열은 Null 문자로 끝납니다. 문자 배열에는 이러한 종료 문자가 없습니다. 다음 코드는 문자열을 정의할 수 있는 몇 가지 방법을 보여줍니다.

#include <stdio.h>

int main()
{
char str[] = "string";
char str1[] = {'s','t','r','i','n','g','\0'};
char str2[10] = "string";
char str3[10] = {'s','t','r','i','n','g','\0'};
char *str4 = "string";

printf("\n str=%s, str1=%s, str2=%s, str3=%s, and str4=%s", str, str1, str2, str3, str4);

return 0;
}

따라서 큰따옴표로 묶인 여러 문자는 문자열이고(Null 문자 종료는 암시적임) 문자로 명시적으로 끝나는 일련의 문자도 문자열입니다.

이 프로그램의 출력은 다음과 같습니다.

 str=string, str1=string, str2=string, str3=string, and str4=string

배열의 끝을 나타내는 Null 종료 문자가 없기 때문에 문자열이 아닌 문자 배열을 이 방법으로 인쇄할 수 없습니다. 이를 시도하는 코드는 다음과 같습니다.

#include <stdio.h>

int main()
{
char str[] = {'e','n','d'};
char c ='t';

printf("\n str=%s", str);

return 0;
}

그러나 대신 끝에 가비지 값을 인쇄하게 됩니다.

str=end??

계속해서 Printf의 %s 형식 지정자가 입력 변수를 문자열로 처리하도록 컴파일러에 지시하는 것처럼 scanf 함수에서 %s를 사용하여 문자열을 사용자의 입력으로 받아들일 수도 있습니다. 예를 들면 다음과 같습니다.

#include <stdio.h>

int main()
{
char str[30];

printf("\n Enter a string with length less than 30 characters: ");
scanf("%s",str);

printf("\n str=%s", str);

return 0;
}

큰따옴표로 묶인 0개 이상의 문자 시퀀스를 문자열 상수 또는 문자열 리터럴이라고 합니다. 이것은 "howtoforge"와 "" 모두 문자열 상수 또는 문자열 리터럴임을 의미합니다.

표준 strlen() 함수를 사용하여 문자열의 길이를 찾을 수 있습니다. 예를 들면 다음과 같습니다.

#include <stdio.h>

int main()
{
char str[] = "howtoforge";

printf("\n Length of string 'howtoforge' is: %d", strlen(str));

return 0;
}

이 프로그램에 의해 생성된 출력은 10이며 정확히 howtoforge의 문자 수와 길이입니다.

계속해서 작은따옴표 안에 있는 문자(예: d)와 큰따옴표 안에 있는 문자(예: "d")는 서로 다르다는 점을 명심할 가치가 있습니다. 첫 번째는 문자 상수(기계 문자 집합에서 문자의 숫자 값을 생성하는 데 사용할 수 있음)이고 두 번째는 문자열(종료 문자가 있음을 의미)입니다.

마지막으로 문자열을 함수의 인수로 전달하는 방법을 빠르게 살펴보겠습니다.

#include <stdio.h>

void change_value(char s[])
{
s[0] = 'H';
s[5] = 'F';

printf("%s", s);

}

int main()
{
char str[] = "howtoforge";

change_value(str);

return 0;
}

따라서 위의 프로그램에서 배열의 기본 주소를 참조하기 때문에 인수로 전달된 배열 str의 이름입니다. 함수 change_value에 대한 선언은 배열을 입력으로 예상하는 것과 같습니다. 이 프로그램의 출력은 다음과 같습니다.

HowtoForge                                                                                                        

따라서 이 자습서에서는 정의 방법 및 사용 방법을 포함하여 문자열의 기본 사항에 대해 논의했습니다. 앞으로 나올 자습서에서 문자열에 대해 자세히 배우겠지만 이 문서는 시작하기에 충분할 것입니다. 문자열과 관련된 질문이나 의심이 있는 경우 아래 의견에 알려주십시오.