산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C에서 문자 포인터와 함수 사용법 익히기

C에서 문자 포인터란 무엇입니까?

문자 포인터 문자 유형의 주소 또는 문자 배열(문자열)의 첫 번째 문자 주소를 저장합니다. 문자 포인터는 문자열을 조작할 때 매우 유용합니다.

C에는 문자열 데이터 유형이 없습니다. "char" 유형의 배열은 문자열로 간주됩니다. 따라서 char 유형 배열의 포인터는 문자열을 나타냅니다. 이 char 포인터는 문자열 처리를 위한 함수에 인수로 전달될 수 있습니다.

문자 포인터 선언

문자 포인터는 문자 또는 문자 배열을 가리킵니다. 따라서 문자 포인터를 선언하려면 다음 구문을 사용하십시오:

char *pointer_name;

문자 포인터 초기화

문자 포인터를 선언한 후에는 문자 변수의 주소로 초기화해야 합니다. 문자 배열이 있는 경우 문자 배열의 이름이나 첫 번째 요소의 주소를 제공하여 문자 포인터를 초기화할 수 있습니다.

문자의 문자 포인터

다음은 문자 유형의 문자 포인터를 초기화하는 구문입니다:

char *pointer_name = &char_variable;

문자 배열의 문자 포인터

다음은 문자 배열(문자열)의 문자 포인터를 초기화하는 구문입니다.

char *pointer_name = char_array;
/*or*/
char *pointer_name = &char_array[0];

문자 포인터 예

다음 예에는 두 개의 변수 문자와 문자 배열이 있습니다. 두 개의 포인터 변수를 사용하여 문자 및 문자 배열의 주소를 저장한 다음 문자 포인터를 사용하여 변수의 값을 인쇄합니다.

#include <stdio.h>
int main() {
 // Declare two variables
 char x = 'P';
 char arr[] = "TutorialsPoint";
 // Declaring character pointers
 char *ptr_x = &x;
 char *ptr_arr = arr;
 // Printing values
 printf("Value of x : %c\n", *ptr_x);
 printf("Value of arr: %s\n", ptr_arr);
 
 return 0;
}

출력

코드를 실행하고 출력을 확인하세요 -

Value of x : P
Value of arr: TutorialsPoint

문자 포인터 이해

문자열은 다음과 같이 배열로 선언됩니다. −

char arr[] = "Hello";

문자열은 NULL로 끝나는 문자 배열입니다. 위 배열의 마지막 요소는 NULL 문자(\0)입니다.

char형 포인터를 선언하고 0번째 위치에 있는 문자의 주소를 할당합니다. −

char *ptr = &arr[0];

배열 이름 자체가 0번째 요소의 주소라는 점을 기억하세요.

char *ptr = arr;

배열 변수 대신 포인터를 사용하여 문자열을 선언할 수 있습니다(대괄호 없음).

char *ptr = "Hello";

이렇게 하면 문자열이 메모리에 저장되고 해당 주소가 ptr에 저장됩니다. ptr을 증가시켜 문자열을 탐색할 수 있습니다.

while(*ptr != '\0'){
 printf("%c", *ptr);
 ptr++;
}

문자 배열 액세스

%s 형식 지정자를 사용하여 문자 배열을 인쇄하는 경우 문자 포인터의 이름을 사용하여 수행할 수 있습니다. 그러나 문자 배열의 각 문자에 액세스하려면 문자 포인터 이름 앞에 별표(*)를 사용한 다음 이를 증가시켜야 합니다.

전체 프로그램 코드는 다음과 같습니다 -

#include <stdio.h>
int main(){
 char arr[] = "Character Pointers and Functions in C";
 char *ptr = arr;
 while(*ptr != '\0'){
 printf("%c", *ptr);
 ptr++;
 }
}

출력

코드를 실행하고 출력을 확인하세요 -

Character Pointers and Functions in C

또는 ptr을 %s 형식으로 printf()에 전달하여 문자열을 인쇄하세요.

#include <stdio.h>
int main(){
 char arr[] = "Character Pointers and Functions in C";
 char *ptr = arr;
 printf("%s", ptr);
}

출력

이 코드를 실행하면 동일한 출력을 얻게 됩니다.

Character Pointers and Functions in C

문자 포인터 함수

"string.h" 헤더 파일은 문자열 길이 찾기, 문자열 복사 및 두 문자열 비교와 같은 문자열 처리를 수행하는 여러 라이브러리 함수를 정의합니다. 이 함수는 char 포인터 인수를 사용합니다.

strlen() 함수

strlen() 함수는 길이, 즉 문자열의 문자 수를 반환합니다. strlen() 함수의 프로토타입은 다음과 같습니다 -

int strlen(char *)

예시 1

다음 코드는 문자열의 길이를 인쇄하는 방법을 보여줍니다 -

#include <stdio.h>
#include <string.h>
int main(){
 char *ptr = "Hello";
 printf("Given string: %s \n", ptr);
 printf("Length of the string: %d", strlen(ptr));
 return 0;
}

이 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Given string: Hello 
Length of the string: 5

예 2

실제로 strlen() 함수는 아래와 같이 사용자 정의 함수 str_len()에 따라 문자열 길이를 계산합니다. −

#include <stdio.h>
#include <string.h>
int str_len(char *);
int main(){
 char *ptr = "Welcome to Tutorialspoint";
 int length = str_len(ptr);
 printf("Given string: %s \n", ptr);
 printf("Length of the string: %d", length);
 
 return 0;
}
int str_len(char *ptr){
 int i = 0;
 while(*ptr != '\0'){
 i++;
 ptr++;
 }
 return i;
}

이 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Given string: Welcome to Tutorialspoint 
Length of the string: 25

strcpy() 함수

할당 연산자( =)는 문자열 값을 문자열 변수(예:char 포인터)에 할당하는 데 사용되지 않습니다. 대신에 다음 프로토타입과 함께 strcpy() 함수를 사용해야 합니다. −

char * strcpy(char * dest, char * source);

예시 1

다음 예는 strcpy() 함수를 사용하는 방법을 보여줍니다. −

#include <stdio.h>
#include <string.h>
int main(){
 char *ptr = "How are you doing?";
 char *ptr1;
 strcpy(ptr1, ptr);
 printf("%s", ptr1);
 return 0;
}

strcpy() 함수는 대상 문자열 ptr1에 대한 포인터를 반환합니다.

How are you doing?

예 2

내부적으로 strcpy() 함수는 사용자 정의 str_cpy() 함수에서 다음 논리를 구현합니다. −

#include <stdio.h>
#include <string.h>
void str_cpy(char *d, char *s);
int main(){
 char *ptr = "Using the strcpy() Function";
 char *ptr1;
 str_cpy(ptr1, ptr);
 printf("%s", ptr1);
 return 0;
}
void str_cpy(char *d, char *s){
 int i;
 for(i = 0; s[i] != '\0'; i++)
 d[i] = s[i];
 d[i] = '\0';
}

그의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

Using the strcpy() Function

이 함수는 NULL 문자 "\0"에 도달할 때까지 소스 문자열의 각 문자를 대상으로 복사합니다. 루프 후에 대상 배열 끝에 "\0" 문자를 추가합니다.

strcmp() 함수

일반적인 비교 연산자(<,>, <=,>=, ==및 !=)는 두 문자열을 비교하는 데 사용할 수 없습니다. 대신 "string.h" 헤더 파일의 strcmp() 함수를 사용해야 합니다. 이 함수의 프로토타입은 다음과 같습니다 -

int strcmp(char *str1, char *str2)

strcmp() 함수에는 세 가지 가능한 반환 값이 있습니다 -

예시 1

다음 예는 C 프로그램에서 strcmp() 함수를 사용하는 방법을 보여줍니다. −

#include <stdio.h>
#include <string.h>
int main(){
 char *s1 = "BASK";
 char *s2 = "BALL";
 int ret = strcmp(s1, s2);
 if (ret == 0)
 printf("Both strings are identical\n");
 else if (ret > 0)
 printf("The first string appears after the second string \n");
 else
 printf("The first string appears before the second string \n");
 return 0;
}

코드를 실행하고 출력을 확인하세요 -

The first string appears after the second string

s1을 BACK으로 변경하고 코드를 다시 실행하세요. 이제 다음과 같은 결과가 출력됩니다 -

The first string appears before the second string

예 2

다음 코드와 같이 사용자 정의 함수 str_cmp()를 사용하면 유사한 결과를 얻을 수 있습니다. −

#include <stdio.h>
#include <string.h>
int str_cmp(char *str1, char *str2);
int main(){
 char *s1 = "The Best C Programming Tutorial Available Online";
 char *s2 = "The Best C Programming Tutorial Available Online";
 int ret = str_cmp(s1, s2);
 if (ret == 0)
 printf("Both strings are identical\n");
 else if (ret > 0)
 printf("The first string appears after the second string\n");
 else
 printf("The first string appears before the second string\n");
 return 0;
}
int str_cmp(char *str1, char *str2) {
 while (*str1 != '\0' && *str2 != '\0') {
 if (*str1 != *str2) {
 return *str1 - *str2;
 }
 str1++;
 str2++;
 }
 // If both strings are equal, return 0
 
 return 0;
}

이 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Both strings are identical

str_cmp() 함수는 문자열의 문자가 모두 소모되거나 문자가 동일해질 때까지 문자열의 동일한 인덱스에 있는 문자를 비교합니다.

동일한 인덱스에서 동일하지 않은 문자를 감지하는 경우 해당 ASCII 값의 차이를 반환합니다. 루프가 종료되면 "0"을 반환합니다.


C 언어

  1. C# - 프로그램 구조
  2. C++ 파일 처리:C++에서 파일을 열고, 쓰고, 읽고, 닫는 방법
  3. 마스터 C 증가 및 감소 연산자:사용법 및 모범 사례
  4. 30가지 필수 Objective-C 면접 질문 및 답변(2026년 가이드)
  5. C++ 프로그래밍에서 함수에 배열 전달
  6. C 라이브러리의 realloc() 함수:어떻게 사용합니까? 구문 및 예
  7. 예제를 사용하여 C#의 직렬화 및 역직렬화
  8. 예제가 있는 C# Windows Forms 응용 프로그램 자습서
  9. C - 조합
  10. C++ 의사결정문