SW/C

12-1 문자열과 포인터

seungH 2025. 3. 30. 21:20
printf("%s", "apple");

이렇게 쓸 경우 a,p,p,l,e에 해당되는 주소값이 각각 저장되고 마지막에 널값도 들어간다.
apple은 배열에 저장되는 것이다.

“”를 사용하여 문자열을 만들면 이것은 배열로 저장이 되는 것이다.

따라서 이런 형식이 가능하다.

char *dessert = "apple";

dessert = "banana";

띄어쓰기 포함해서 문자열에 저장하기

gets(str);
버퍼에는 개행이 그대로 들어가지만 배열에 저장될때 널문자로 바껴서 저장된다.

따라서 다음상황에서 버퍼를 지워줘야함.

scanf("%d",&age);
gets(name);
//scanf는 개행문자(화이트스페이스)를 제외하고 버퍼를 비운다. 근데 gets는 개행문자가 있으면 널문자로 바꾼다.

scanf와 gets함수는 입력되는 문자열의 크기가 배열 크기를 넘어설 위험이 있다.

그럴때 fgets를 사용하여 메모리를 보호한다.

char str[80];
fgets(str, sizeof(str), stdin);
//순서대로 배열명, 배열크기, 표준입력

fgets는 gets와 다르게 개행문자가 널문자로 바뀌지 않고, 개행문자 이후에 널문자가 붙는다.

→개행문자를 없애줘야한다.

str[strlen(str)-1] = '\\0';

'SW > C' 카테고리의 다른 글

17-1 구조체  (0) 2025.03.30
13-2 함수의 데이터 공유 방법  (0) 2025.03.30
11-2 버퍼를 사용하는 입력함수  (0) 2025.03.30
10-1 배열과 포인터  (0) 2025.03.30
9-2 포인터 완전정복  (0) 2025.03.30