IT이야기

문자열이 있는 문자열 및 문자(프린트f 포함)

cyworld 2022. 4. 26. 22:03
반응형

문자열이 있는 문자열 및 문자(프린트f 포함)

의 사용법에 혼동했다.%c그리고%s다음 C 프로그램에서.

#include <stdio.h>
    
void main()
{
    char name[]="siva";
    printf("%s\n",name);
    printf("%c\n",*name);
}

출력은

siva
s

%c 문자를 표시하기 위해 포인터를 사용해야 하는 이유, 문자열에는 포인터가 필요하지 않은 이유

사용할 때 오류가 발생하는 경우

printf("%c\n", name);

내가 받은 오류는

str.c: In function ‘main’:
str.c:9:2: warning: format ‘%c’ expects type ‘int’, but argument 2 has type ‘char *’

이 방법을 사용하는 경우:

#include<stdio.h>

void main()
{
 char name[]="siva";
 printf("name = %p\n", name);
 printf("&name[0] = %p\n", &name[0]);
 printf("name printed as %%s is %s\n",name);
 printf("*name = %c\n",*name);
 printf("name[0] = %c\n", name[0]);
}

출력:

name = 0xbff5391b  
&name[0] = 0xbff5391b
name printed as %s is siva
*name = s
name[0] = s

그래서 '이름'은 실제로 메모리에 있는 문자 배열의 포인터 입니다.0xbff5391b로 처음 4바이트를 읽어보면 's', 'i', 'v', 'a'가 나타난다.

Location     Data
=========   ======

0xbff5391b    0x73  's'  ---> name[0]
0xbff5391c    0x69  'i'  ---> name[1]
0xbff5391d    0x76  'v'  ---> name[2]
0xbff5391e    0x61  'a'  ---> name[3]
0xbff5391f    0x00  '\0' ---> This is the NULL termination of the string

문자를 인쇄하려면 인쇄할 문자 값을 전달해야 한다.값은 이름[0] 또는 *이름(배열 이름 = &name[0])으로 참조할 수 있다.

문자열을 인쇄하려면 포인터를 인쇄할 문자열로 전달해야 한다(이 경우 '이름' 또는 '&name[0]').

%c

한 글자 한 글자만을 위해 디자인되어 하나의 요소만 인쇄한다.문자 배열을 포인터로 전달하면 배열의 첫 번째 요소(단일 문자) 주소를 전달하고 다음과 같이 인쇄된다.

s

printf("%c\n",*name++);

인쇄할 것이다

i

등등...

%s은 문자열을 사용하여 직접 작동할 수 있으므로 포인터가 필요하지 않다.

참조 해제 연산자를 포인터 유형 주석 *과 혼동하는 경우. 기본적으로 C *는 다른 위치에서 다른 것을 의미한다.

  • 유형에서 *는 포인터를 의미한다.int는 정수 유형이고, int*는 정수 유형에 대한 포인터임
  • 접두사 연산자로서 *는 '기각'을 의미한다.name은 포인터, *name은 포인터 참조를 취소한 결과(즉, 포인터가 가리키는 값 가져오기)
  • 물론 infix 운영자로서 *는 '다중'을 의미한다.

배열의 이름은 첫 번째 요소의 주소이므로name "시바"라는 문자열을 포함하는 메모리에 대한 포인터 입니다.

또한 문자를 표시하기 위해 포인터가 필요하지 않으며, 이 경우 배열에서 직접 포인터를 사용하도록 선택하기만 하면 된다.대신 이렇게 할 수 있다.

char c = *name;
printf("%c\n", c);

만약 당신이 하나의 문자를 표시하기를 원한다면 당신은 또한 사용할 수 있다.name[0]포인터 대신.

목적에 부합하지만 다음 중 하나를 사용하여 전체 문자열을 표시하려면%c, 다음을 사용해 보십시오.

#include<stdio.h>
void main()
{ 
    char name[]="siva";
    int i;
    for(i=0;i<4;i++)
    {
        printf("%c",*(name+i));
    }
} 

중요한 것은 인쇄 기능에는 파라미터로 포인터가 필요하다는 것이다.그러나 char는 당신이 직접 가지고 있는 변수다.문자열은 문자열의 첫 번째 문자에 있는 포인터가므로 *는 변수의 포인터에 대한 식별자이므로 *를 추가할 필요가 없다.

참조URL: https://stackoverflow.com/questions/8019615/strings-and-character-with-printf

반응형