코린이
Day16 본문
어제는 문자열 입력 함수를 배웠다면 오늘은 문자열의 관련 함수를 배웠다.
문자열 관련 함수를 사용할 때는 string.h 헤더 파일을 선언해 줘야 한다.
문자열 관련 함수
strlen(문자열):넘겨준 문자열의 길이를 반환해 주는 함수
(반원 해주는 길이는 NULL 문자를 제외한 길이이다.)
strcmp(문자열 1, 문자열 2): 넘겨준 두 개의 문자열을 비교하고 같으면 거짓, 다르면 참을 반환해 주는 함수
(문자열이 다를 경우, 문자열 1이 사전 편찬 순으로 빠르면 -1, 느리면 1을 반환)
strcpy(문자열을 저장할 공간, 복사할 문자열): 문자열을 저장할 공간에 복사할 문자열을 복사해 주는 함수
strcat(문자열을 붙일 공간, 붙일 문자열): 문자열 붙일 공간 뒤에 넘겨받은 문자열을 덧붙여주는 함수
#include<stdio.h>
#include<string.h>
int main(){
char str[100];
printf("입력: ");
scanf("%s",str);
printf("길이: %d",strlen(str));
return 0;
}
scanf("% s", str)에서 배열의 이름과 같이 주소를 가리키는 것들은 &를 붙이지 않아도 된다.
![](https://blog.kakaocdn.net/dn/cgapdm/btrZlr6Mhg6/wE8JXZVkeZ8KlH3zXz96Mk/img.png)
#include<stdio.h>
#include<string.h>
int main(){
char str1[100], str2[100];
printf("문자열1 입력: ");
scanf("%s",str1);
printf("문자열2 입력: ");
scanf("%s",str2);
if (str1 == str2)
printf("두 문자열은 같습니다.\n");
else
printf("두 문자열은 다릅니다.\n");
printf("출력: %d\n",strcmp(str1,str2));
return 0;
}
![](https://blog.kakaocdn.net/dn/cQVMqv/btrZo9keXe5/JuL1JuGP1wHPoJBzWZbEJ0/img.png)
str1과 str2의 배열을 100으로 지정해 준다. if() 문에서 str1과 str2값이 같으면 "문자열은 같습니다"를 출력하고
다르면 "문자열은 다릅니다"를 출력한다.
strcmp(str1, str2)은 위에서 설명하듯이 문자열이 다를 경우, 문자열 1이 사전 편찬 순으로 빠르면 -1, 느리면 1을 반환을 반환한다.
#include<stdio.h>
#include<string.h>
int main(){
char str1[100], str2[100];
printf("문자열1 입력:");
scanf("%s",str1);
printf("문자열2 입력:");
scanf("%s", str2);
strcat(str1,str2);
printf("출력: %s\n",str1);
return 0;
}
다음은 strcat 함수를 사용한 코드이다
![](https://blog.kakaocdn.net/dn/xfIU2/btrZsHzKVDS/4VFB3pCSbHPTZak3kNxUg0/img.png)
그다음은 포인터에 대해 배워보았다.
포인터 변수는 주소를 저장해 주는 변수를 의미한다.
포인터 변수 선언 방법으로는 저장할 공간의 자료형 *(에스타 리스크) 변수명;으로 선언해 준다.
포인터 변수 안에 저장된 주소로 접근해서 주소 안의 값을 확인할 때는 *포인터 변수 형식으로 확인할 수 있다. 이를 역참조라고 한다.
포인터 변수는 일반 변수의 주소를 저장할 수 있음 → 이중 포인터 변수는 포인터 변수의 주소를 저장할 수 있다 →삼중 포인터 변수는 이중 포인터 변수의 주소를 저장할 수 있고 → 사중 포인터 변수는 삼중 포인터 변수는 주소를 저장할 수 있다 →...;
포인터를 활용한 예제이다.
#include<stdio.h>
int main(){
int num = 5;
int* ptr;
int** dptr; //int의 이중 포인터
int*** tptr; //int의 삼중 포인터
ptr = #
dptr = &ptr;
tptr = &dptr;
printf("num의 주소: %p\n",&num);
printf("ptr의 값: %p\n",ptr);
printf("\nnum의 값: %d\n",num);
printf("ptr을 이용한 num의 값: %d\n", *ptr);
printf("dptr을 이용한 num의 값: %d\n",**dptr);
printf("tptr을 이용한 num의 값: %d\n", ***tptr);
printf("\nptr의 주소: %p\n", &ptr);
printf("dptr의 값: %p\n",dptr);
printf("\ndptr의 주소: %p\n",&dptr);
printf("tptr의 값: %p\n", tptr);
return 0;
}
![](https://blog.kakaocdn.net/dn/bXyF3b/btrZrywxysg/ZfD21i4siqFxCATxVBJL81/img.png)
Q1) 정수형 변수를 선언하고 포인터 변수에 해당 변수의 주소를 저장 후, 포인터 변수를 통해 정수를 입력받으시오(정수형 변수의 값은 0으로 초기화)
#include<stdio.h>
int main(){
int num = 0;
int* ptr;
ptr = #
printf("입력: ");
scanf("%d",ptr);//&*ptr도 가능
printf("출력: %d\n",num);
return 0;
}
![](https://blog.kakaocdn.net/dn/T9B3k/btrZo8r5E94/Jyfuk74HOXaNkLvwWdwykK/img.png)