코드네임 :
C 혼공일기 8일차 (문자열과 포인터/ 문자열 연산 함수) 본문
2/1 - 어제 놂 ㅋㅋ ㅜㅜ

문자열은 배열의 구조를 가지며, 첫번째 문자의 주소로 쓰임
주소로 접근해서 문자열을 바꾸지 말것!! (ex. *"apple"='t' (첫번째 문자를 t로 바꿔라)
350p 여기서 잠깐!이 뭔 말인지 모르겟거
-> 아냐!!!! 그 최적화 여부 확인하는 코드 써보니까 바로 이해 됨 ㅋㅋㅋ 같은 문자열이면 어디에 저장해도 주소가 같네영
(같은 문자열 상수를 여러번 사용할 때 하나의 문자열에만 메모리를 저장하고 그 주소를 공유)
scanf는 공백문자, 탭문자, 개행문자\n 이전까지만 저장함
gets는 공백문자, 탭문자, 개행문자\n 이후까지도 저장함
fgets 함수는 gets와 똑같으나(\n의 처리방식은 다르다네요) 최대 배열 크기까지만 문자열 입력 ( 배열의 크기 확인 가능 )
아놔 358p fgets(name, sizeof(name), stdin); 이부분 빼먹음;;;
fgetc(stdin);만 쓰면 실행이 안되자나요;; 왜 안되나 햇네,,
puts : 자동 줄바꿈
fputs : 줄 바꾸지 않음
와!!! 12-1 문제 다맞음 헤헷
#include <string.h>
strcpy(복사받을곳str1, 복사할내용str2); : 문자열을 한번에 복사 대입
strncpy(복사받을 배열명, "복사할 문자열", 복사할 문자 수); : 원하는 개수의 문자만을 복사
(복사할 문자수가 1이라면 복사할 문자열의 첫번째 문자를 복사받을 곳의 첫번째 문자에 대입)
strcat(str,"문자열"), strncat : 문자열 뒤에 이어붙이기
strlen(str) : 배열에 들어있는 문자열의 길이 확인하기
strcmp(str1, str2); : 문자열 비교 ! (아스키 코드로)
//str1이 str2보다 사전에 나중에 나오면 1 반환 if (strcmp(str1, str2) > 0)
//str2가 str1보다 사전에 나중에 나오면 -1 반환 if (strcmp(str1, str2) < 0)
//str1 == str2이면 0 반환 if (strcmp(str1, str2) == 0)
배열에 저장된 문자열 : 문자열 변수 (수정가능)
포인터로 저장된 문자열 : 문자열 상수 (수정불가)
char str[] = "lion"; //변수
char* ps = "king"; //상수
따라서
strcpy(ps, str);이나
strncpy(ps, str, strlen(str)); 실행 불가
(ps가 연결하고 있는 문자열 상수(king)는 바꾸면 안됨!)
381번 3번 문제 땜에..



그렇군..
*은 문자열에서 첫번째 하나만 가리키고,, []는 문자열 전체를 가리킨다.
381번 도전 실전 예제 다시
+ 문자열 배열 선언시 반드시 포인터 배열로 선언해야함

'⚙️Computer System > C' 카테고리의 다른 글
C혼공10일차 - 다차원 배열/ 포인터 배열 (0) | 2024.02.04 |
---|---|
C혼공 9일차 - 변수 사용 영역 (0) | 2024.02.02 |
C혼공일기 7일차 (문자) (1) | 2024.01.27 |
C 혼공일기 5,6일차 (포인터와 배열) (0) | 2024.01.25 |
C혼공일기 4일차 (포인터) (0) | 2024.01.24 |