해당 글의 예제처럼 문자열 선언과 동시에 값을 넣는 방법 말고 scanf로 값을 입력 받아 문자열 자르기를 하려고 했는데
#define _CRT_SECURE_NO_WARNINGS // strtok 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h> // strtok 함수가 선언된 헤더 파일
#include<stdlib.h>
int main()
{
char s1[30]; // 크기가 30인 char형 배열을 선언하고 문자열 할당
scanf("%s", s1);
char* sArr[10] = { NULL, }; // 크기가 10인 문자열 포인터 배열을 선언하고 NULL로 초기화
int i = 0; // 문자열 포인터 배열의 인덱스로 사용할 변수
char* ptr = strtok(s1, " "); // 공백 문자열을 기준으로 문자열을 자름
while (ptr != NULL) // 자른 문자열이 나오지 않을 때까지 반복
{
sArr[i] = ptr; // 문자열을 자른 뒤 메모리 주소를 문자열 포인터 배열에 저장
i++; // 인덱스 증가
ptr = strtok(NULL, " "); // 다음 문자열을 잘라서 포인터를 반환
}
for (int i = 0; i < 10; i++)
{
if (sArr[i] != NULL) // 문자열 포인터 배열의 요소가 NULL이 아닐 때만
printf("%s\n", sArr[i]); // 문자열 포인터 배열에 인덱스로 접근하여 각 문자열 출력
}
return 0;
}
해당 코드에서 The Little Prince 입력시 The밖에 출력되지 않습니다.
문자열 포인터로 malloc 함수를 통해 메모리를 할당해도 동작하지 않는데 어떻게 해야하나요?
scanf는 공백으로 값을 구분합니다.
공백을 포함해서 여러 단어를 값 하나로 입력하려면 서식 지정자를 다르게 써야 합니다. UNIT 40.1을 복습해주세요.