[C] 씹어먹는 C 언어 - <15 - 1~2. string>

Kim Dongil·2022년 10월 23일
0

C

목록 보기
20/28

1. 놀랍게도 배열을 할당하지 않고도 다음과 같이 문자열을 지정할 수 있습니다. 그렇다면 위 str 과 char str[]={"abcdefghi"}; 의 차이점은 무엇일까요?

(난이도 : 上)

(const 를 붙인 이유)

const char *str = "abcdefghi"; 와 char str[] = "abcdefghi"; 의 차이점

const char \*str
char 형을 가리키는 char 형 포인터변수 이므로 char 형 변수의 주소값이 들어가야한다.
"abcdefghi" 라는 문자열이 있는 주소값이 들어간다.

char str[]
"abcdefghi" 라는 문자열을 str 이라는 배열에 집어넣는 평범한 문장이다.

2. 다음 문장이 왜 성립하지 않는지 생각해보세요

(난이도 : 中上)

if 문에 사용된 str_a와 str_b 비교는 str_a의 주소값과 str_b의 주소값을 비교하기 때문에,
두 주소값은 같을 수 없으므로 성립하지 않습니다.

3. (2) 의 답을 얻었다면 두 개의 문자열을 비교하는 함수를 만들어서 같으면 1, 다르면 0 을 리턴하게 해보세요.

(난이도 : 中)

#include <stdio.h>

int compare_str(char *str_a, char *str_b);

int main(void)
{
	char str_a[100];
	char str_b[100];

	printf("두 문자열을 비교하는 프로그램입니다 문자열을 두 번 입력해주세요 \n\n");

	printf("첫 번째 문자열 : ");
	scanf("%s", str_a);
	printf("두 번째 문자열 : ");
	scanf("%s", str_b);
	

	printf("%d", compare_str(str_a, str_b));

	return 0;
}

int compare_str(char* str_a, char* str_b)
{
	int i = 0;

	while (str_a[i]!= NULL || str_b[i]!= NULL)
	{
		if (str_a[i] != str_b[i])
			return 0;
		i++;
	}
	

	return 1;
}
int compare(char *str1, char *str2) {
  while (*str1) {
    if (*str1 != *str2) {
      return 0;
    }

    str1++;
    str2++;
  }

  if (*str2 == '\0') return 1;

  return 0;
}

씹어먹는 C 언어 - <15 - 1. 일로와봐, 문자열(string)>
씹어먹는 C 언어 - <15 - 3. 일로와봐, 문자열(string) - 문자열 지지고 볶기 & 리터럴>

0개의 댓글