일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- HTML #핵심정리
- Bandit
- C언어 # 핵심 정리
- C언어 #핵심정리
- C++ 언어 # 핵심정리
- PHP #핵심정리
- C++ 언어 #핵심정리
- C언어 # 부록
- C++ 언어 # 핵심 정리
- Hacking #Baic
- C언어 #부록
- MySQL #핵심정리
- shell_script
- Today
- Total
목록C Language Basic (48)
cCcode

1. 문자열 검색하기 문자열에서 특정한 문자를 검색하기 위해선 strchr 함수를 사용해야 합니다. 함수명은 (string character)에서 가져왔습니다. (파일에 선언되어 있습니다.) 위 코드가 어떻게 동작하는 지 간단하게 순서도로 정리해볼게요. 1) strchr 함수를 사용해서 strchr 함수가 문자열 'Garden of god' 에서 문자 'g'를 찾아 'g'의 포인터를 반환하면 그 포인터를 Ptr 포인터 변수에 저장합니다. 2) while (Ptr != NULL) 즉, 'g'라는 문자가 나오지 않을때까지 계속 반복 3) Ptr = strchr(Ptr + 1, 'g') 현재 Ptr에는 'g'부터 시작하는 문자열의 포인터가 저장되어 있습니다. 그런데 여기서 Ptr 에 + 1 을 하면 다음 문자..

1. 문자열 만들기 지금까지 사용한 printf 함수는 오직 문자열을 화면에 출력할 수만 있었습니다. 만약 printf 함수를 사용해서 문자열을 만든 후 따로 저장하고 싶다면 sprintf 함수를 사용해야합니다. 그러면 서식(format)을 지정하여 문자열을 만들 수 있습니다. (파일에 선언되어 있습니다.) 일단, 첫 번째 줄만 보시고도 sprintf 함수 역시 보안 상의 문제로 sprintf_s 함수가 존재한다는 걸 아시겠죠? 제가 코드에 #define _CRT_SECURE_NO_WARNINGS 처럼 정의한다면 그 코드에서 사용하는 함수는 보안상 문제가 있고 그 함수의 원형을 보여드리기 위해 사용한다고 보시면 됩니다. 보통 str과 같이 문자열을 저장한 빈 배열을 뭐라고 한다고 했죠? 저번 시간에 언급..

1. 문자열 복사하고 붙이기 문자열은 다른 배열이나 포인터로 복사할 수 있습니다. 복사할 때는 strcpy 함수를 사용하며, 함수명은 문자열 복사하기(string copy)에서 가져왔습니다. (파일에 선언되어있습니다.) strcpy 함수를 사용했더니 [error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.] 라는 에러가 발생하네요. 간단히 설명하자면 strcpy 함수가 scanf 함수처럼 잠재적 위험 때문에 안전하지 못하니 strcpy_s 함수를 사용하라는 권고문입니다. 그전 scanf의 위험성은 딱히 언급하지 않았지만 이번에는 언급하고 넘어가겠습니다. strcpy 함수에 복사될 메모리의..

1. 문자열 비교하기 (상세) 위 코드에서 이상한 점이 보이시나요? 바로 strcmp함수에서 s1부분이 경고를 나타내는 녹색줄로 표시되네요. 경고는 다음과 같습니다. 해당 경고는 변수를 사용하기 전 메모리에 남아있는 쓰레기 값을 지우지 않고 그대로 사용할 때 자주 발생하는 경고입니다. 그러면 여기서 의문이 들겠죠? 나는 분명히 값을 할당하면서 그전 값은 없어졌을 텐데, 왜 이런 경고가 뜨는것일까? 저도 이런 의문이 들어 한 가지의 가설을 세웠습니다. "배열을 처음 선언해서 할당할 때는 중괄호를 사용하는 데, 중괄호를 사용하지 않아서 값이 제대로 할당되지 않은 것인가? 그래서 해당 변수가 제대로 초기화 되지 않은거 같은데?" 따라서 저는 중괄호를 통해 요소 하나 하나에 값을 할당해주었죠. 그 결과 그전에 ..

1. 문자열 길이 구하고 비교 문자열은 문자 여러개의 모음이라고 말씀드렸죠? 그렇기 때문에 길이가 존재합니다. 문자열의 길이는 strlen 함수로 구할 수 있으며, 함수명은 문자열의 길이(string length)에서 가져왔습니다. (해당 함수는 파일에 선언되어 있습니다.) strlen 함수에 문자열 포인터(배열)을 넣으면 문자열의 길이가 반환됩니다. strlen 함수로 문자열의 길이를 구할 때는 널문자를 포함하지 않습니다. 특히 배열에서 배열의 크기가 항상 문자열의 길이를 가리키는 건 아닙니다. strlen 함수는 size_t 자료형을 반환하기 때문에 %zd 서식지정자를 사용합니다. 여기까지 따라오셨다면 자료형을 구분해서 그에 맞는 서식지정자를 사용할 수 있을거에요. 근데 분명 자료형을 맞게 썼다 생각..

1. 입력값을 문자열에 저장 scanf 함수에서 서식지정자로 %s를 사용하면 입력 값을 배열 형태의 문자열에 저장할 수 있습니다. 일반 변수의 입력값을 받을 때와는 달리 배열 앞에는 &(주소연산자)를 사용하지 않습니다. 왜냐하면 배열도 포인터처럼 주소를 담고 있기 때문이죠. 만약 scanf 함수에서 서식지정자 %s로 문자열을 저장할 때 입력된 문자열에 공백이 있다면 공백 직전까지만 저장됩니다. 그래서 공백까지 포함하여 입력받고 싶다면 scanf 함수에서 서식지정자를 %[^\n]s의 형태로 지정하면 공백까지 포함하여 문자열을 입력받을 수 있습니다. 2. EOF EOF는 End Of File의 약자이며, 더 이상 값을 읽을 수 없는 상태를 나타냅니다. Windows에서는 Ctrl + Z 키의 입력을 EOF로..

우선 들어가기에 앞서 제가 그전에 언급했던 코드를 보여드리겠습니다. * 동적할당을 통해 포인터를 2차원배열처럼 사용하는 예제 #include #include void assign_value(int** numPtr, int row, int col); void print_value(int** numPtr, int row, int col); int main() { int row, col; printf("세로 : "); scanf_s("%d", &row); printf("가로 : "); scanf_s("%d", &col); int** numPtr = malloc(sizeof(int*) * row); if (row < 2) { if (numPtr != NULL) for (int i = 0; i < row; i++..

1. 2차원 배열을 포인터에 사용하기 이제 2차원 배열을 포인터에 할당해서 사용해보겠습니다. 이처럼 2차원 배열을 포인터에 바로 할당할 수 있습니다. 다만, 이 때는 자료형과 가로크기가 일치해야 합니다. + 3차원 배열 3차원 배열은 높이x가로x세로 형태로 이루어져있습니다. 3차원 배열은 [ ]에 높이, 세로 크기, 가로 크기를 지정하여 선언합니다. 값을 초기화 할 때는 면 단위로 중괄호를 묶어주면 편합니다. 3차원 배열에 접근하려면 [ ]를 세번 사용하여 높이, 세로, 가로 인덱스를 지정해주면 됩니다. 3차원배열을 포인터에 할당하려면 세로x가로로 구성된 면을 가리키는 포인터를 선언하면 됩니다. 여기서 면의 크기가 무엇인지 모르는 분들도 계시겠죠? 3차원 배열은 이와 같은 그림으로 나타낼 수 있습니다. ..