C언어 - 문자열을 정의 하는 방법
2020. 11. 12. 16:34ㆍ개인공부/C언어
남는 공간에 null character를 채워준다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MESSAGE "A symbolic string contant"
#define MAXLENGTH 81
int main() {
char words[MAXLENGTH] = "A string in an array"; // char 타입의 배열
// 배열자체가 메모리를 가지고 있다.
const char* pt1 = "A point to a string.";
// 문자열에 대한 포인터
// 포인터는 어딘가에 저장되어있는 것의 첫번째 주소를 가져오는 것
//puts 함수는 문자열을 출력
puts("Puts() 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!";
puts(greeting);
printf("%s, %p, %c\n", "We", "are", *"excellent programmers");
//"excellent programmers"의 첫번째 공간의 주소를 indirection하면 e
// 결과값 : We, 00F57BE4, e
const char m1[15] = "Love you!";
for (int i = 0; i < 15; ++i)
printf("%d ", (int)m1[i]); // Love you! 이외 남는 공간은 null character 로 초기화
printf("\n");
// 76 111 118 101 32 121 111 117 33 0 0 0 0 0 0
const char m2[15] = { 'L','o', 'v', 'e', ' ', 'y', 'o', 'u', '!','\0' };
for (int i = 0; i < 15; ++i)
printf("%d ", (int)m2[i]);
printf("\n");
// 76 111 118 101 32 121 111 117 33 0 0 0 0 0 0
const char m3[] = "Love you, too!";
int n = 8;
char cookies[1] = { 'A', };
char cakes[2+5] = { 'A', };
char pies[2 * sizeof(long double) + 1] = { 'A', };
//char crumbs[n]; // VLA
char truth[10] = "Truths is";
if (truth == &truth[0]) puts("true!");
if (*truth == 'T') puts("true!");
if (*(truth + 1) == truth[1]) puts("true!");
if (truth[1] == 'r') puts("true!");
/*
true!
true!
true!
true!
*/
return 0;
}
출처 : 홍정모의 따라배우는 C언어
'개인공부 > C언어' 카테고리의 다른 글
C언어 - 메모리 레이아웃 훑어보기 (0) | 2020.11.12 |
---|---|
C언어 - 메모리 레이아웃과 문자열 (Memory Layout ) (0) | 2020.11.12 |
C언어 - 복합리터럴과 배열 ( Compound Literals ) (0) | 2020.11.12 |
C언어 - 포인터의 호환성(Compatibility) (0) | 2020.11.12 |
C언어 - 2차원 배열과 포인터 (0) | 2020.11.12 |