따라 배우는 C언어 : 12
🙇♀️12
🪐문자열을 정의하는 방법들
숫자 하나 : 1
숫자의 배열 : 0123456789
문자 하나 : ‘a’
문자의 배열 : ‘H’ ‘e’ ‘l’ ‘l’ ‘o’ ‘\0’
char words[MAXLENGTH] = "A string in an array";
const char* pt1 = "A pointer to a string";
puts("Put() adds a newline at the end: "); // puts() add \n at the end
puts(MESSAGE);
puts(words); // char words[21] removes this warning
puts(pt1);
words[3] = 'p'; // OK
puts(words);
// pt1[8] = 'A'; // Error 읽기 전용 데이터
char greeting[50] = "Hello, and" " How are""you"
" today!";
// char greeting[50] = "Hello, and How are you today!"; // 위와 동일함
puts(greeting);
printf("\" To be, or not to be\" Hamlet said.\n");
printf("%s, %p, %c\n", "we", "are", *"excellent programmers");
🪐문자열을 입력받는 다양한 방법들
/* Creating Space */
//char* name = ""; // Error at RUN-TIME
// 문자열을 입력 받을 때는 메모리 공간을 확보하고 입력 받아야 한다
//char name[STRLEN];
//int result = scanf("%s", name);
// 배열을 이미 주소값이란 의미를 내포하므로 &를 사용하지 않는다
- scanf() vs gets()
- scanf() reads one word
- gets() reads one line and removes \n and add \0
char words[STRLEN] = ""; // Warning without initialization
// gets(words); // gets recrives pointer. No idea when string ends.
// gets는 포인터만 받기에 시작위치는 알지만 얼마나 긴지 모른다.
gets_s(words, sizeof(words)); // C11
// int result = scanf("%s", words);
printf("START\n");
printf("%s", words); // no \n at the end
puts(words); // puts() adds \n at the end
puts("END.");
배열의 공간을 작게 잡고 더 큰값을 입력
런타임에러 발생