strncpy() 란?

  • string n개를 copy 하는 함수
  • strcpy() 보다 안전한 함수

1) 함수 원형

char* strncpy(char* destination, const* source, size_t count);
  • 최대 count만큼 soruce를 destination에 복사한다.
  • 널 문자를 먼저 만나면 그전에 끝냄

1-1) source가 count보다 짧으면 

  • 남은걸 다 '\0'으로 채워줌

1-2) source가 count보다 길다면

  • count만큼 복사함
  • 널 문자를 못붙여서 안 붙여줌 
    • 이럴 경우 맨 마지막에 '\0'을 넣어줘야 함.

2) 예제

2-1) destination배열의 개수가 3개이고, source배열의 개수가 5개인데, 5개를 복사하면 어떻게 될까?

  • 결과적으로는 2개를 복사가 된다.
  • 3개가 복사 되지만 문자열의 끝을 알려주기 위해 별도로 destination 맨 마지막에 '\0'을 넣어줘야하기 때문

 

'C' 카테고리의 다른 글

[C언어] 음수의 변환 과정  (0) 2022.03.06
[C언어] 문자열 초기화 방법  (0) 2022.02.25
[C언어] 얕은 복사 vs 깊은 복사  (0) 2022.02.24
[C언어] #include 2가지 방식  (0) 2022.02.21
[C언어] size_t vs unsigned int  (0) 2022.02.21

1) 음수는 어떻게 변환 될까?

1-1) 음수의 변환 과정

  1. 음수의 값을 절대값으로 바꿔준다.
  2. 절대값을 바꾼 값을, 2진수로 변환한다.
  3. 2진수로 변환한 값을 0과 1을 바꿔준다. (1의 보수)
  4. 1의 보수를 구한 후 다시 1을 더해서 2의 보수로 만든다.

 

 

'C' 카테고리의 다른 글

[C언어] strncpy() 문자열 복사 함수  (0) 2022.03.06
[C언어] 문자열 초기화 방법  (0) 2022.02.25
[C언어] 얕은 복사 vs 깊은 복사  (0) 2022.02.24
[C언어] #include 2가지 방식  (0) 2022.02.21
[C언어] size_t vs unsigned int  (0) 2022.02.21

문자열 초기화 방법에는 2가지 방법이 존재

 

  • 첫번째 방법
char* name = “hello”;

 

  • 두번째 방법
char name[] = “hello”;

 

2가지 방법의 차이는 무엇인가?

  • 1의경우 name변수에는 데이터섹션에있는 hello의 시작주소(포인터)를 저장을 함
  • 2의경우는 데이터섹션에 있는 hi를 스택메모리로 복사해옴, 스택메모리에있는 hello의 시작주소(포인터)를 저장
  • 따라서 1의경우는 데이터섹션에있는 원본의값을 의도치 않게 덮어 쓸 위험이 있음

'C' 카테고리의 다른 글

[C언어] strncpy() 문자열 복사 함수  (0) 2022.03.06
[C언어] 음수의 변환 과정  (0) 2022.03.06
[C언어] 얕은 복사 vs 깊은 복사  (0) 2022.02.24
[C언어] #include 2가지 방식  (0) 2022.02.21
[C언어] size_t vs unsigned int  (0) 2022.02.21

얕은 복사

  • 주소를 복사하는 것을 말함. 즉 데이터 값을 복사하는 것이 아니라, 포인터를 이용하여 가리키게 함

얕은 복사의 단점

포인터를 가리키는 것을 바꾸면 복사한 값들도 바뀌게 됨

 

 

깊은 복사

  • 따로 독자적인 메모리를 만들어서, 거기에 복사를 해야 함. 

 

'C' 카테고리의 다른 글

[C언어] 음수의 변환 과정  (0) 2022.03.06
[C언어] 문자열 초기화 방법  (0) 2022.02.25
[C언어] #include 2가지 방식  (0) 2022.02.21
[C언어] size_t vs unsigned int  (0) 2022.02.21
[C언어] C 빌드과정  (0) 2022.02.21

include 방식은 2가지

 

1. #include <>

  • <>으로 들어가는 것은 C언어가 제공하는 라이브러리
  • 대표적인 것으로 #include <stdio.h>

2. #include ""

  • 직접 경로를 통해서 헤더파일을 추가할 때 사용
  • 예시)
    • user_lib란 폴더에 main.c가 있고, my_lib.h라는 파일이 있을 때, main.c에서 #include "my_lib.h" 맨 위쪽에 입력 후 사용 

'C' 카테고리의 다른 글

[C언어] 음수의 변환 과정  (0) 2022.03.06
[C언어] 문자열 초기화 방법  (0) 2022.02.25
[C언어] 얕은 복사 vs 깊은 복사  (0) 2022.02.24
[C언어] size_t vs unsigned int  (0) 2022.02.21
[C언어] C 빌드과정  (0) 2022.02.21
int main(void)
{
    size_t i;
    
    for(i = 0; i < 10 ; i++) {
        printf("Hello world\n");
    }
}

C언어를 공부하다 보면, 위처럼 size_t를 많이 보게 된다.

size_t를 여러가지 용도로 사용하는데, for문 안에 있는 인덱스를 표현하는 부분에도 많이 사용된다.

 

그렇다면 본론을 말하겠다. size_t 와 unsinged int의 차이는 무엇인가라고 말하면,

일단 unsigned의 개념이 뭔지 알아야한다. 


1) unsigned int란 ?

부호 없는 정수를 말한다. 즉, - +가 없는 정수라는 것 (항상 양수)

 

1-1) singed int vs unsigned int 범위 비교 (참고)

unsinged int : 0 ~ 4,294,967,295
singed int : –2,147,483,648 ~ 2,147,483,647

 

2) 그렇다면 size_t는 무엇인가?

size_t는 부호없는 정수이나, 실제 데이터 아니다.

_t는 typedef를 나타내며, 플랫폼에 따라 다른 자료형을 쓰기위해 size_t를 typedef한 것이다.

 

32비트 운영체제에서는 '부호없는 32비트 정수'

64비트 운영체제에서는 '부호없는 64비트 정수'

라고 해석하면 된다.

 

3) 요약

  • size_t는 운영체제가 32비트면 항상 부호없는 32비트이고, 만약 운영체제가 64비트면 부호없는 64비트 정수
  • unsigned int or int의 경우에는 운영체제가 32비트이여도 항상 32비트가 정수아닐 수 있으며, 64비트도 마찬가지

'C' 카테고리의 다른 글

[C언어] 음수의 변환 과정  (0) 2022.03.06
[C언어] 문자열 초기화 방법  (0) 2022.02.25
[C언어] 얕은 복사 vs 깊은 복사  (0) 2022.02.24
[C언어] #include 2가지 방식  (0) 2022.02.21
[C언어] C 빌드과정  (0) 2022.02.21

C언어의 4가지 단계의 빌드과정

 

1. 전처리 단계

  • 복붙과정
  • 헤더파일의 함수를 복사 붙여 넣기 해줌

2. 컴파일 단계

  • 트렌스레이션 유닛(코드)들을 어셈블리어 코드로 변환해줌

3. 어셈블 단계

  • 기계어로 바꿔줌

4. 링크 단계

  • 구멍을 메꿔준다.
  • 점프하는 코드를 넣어줌

 

'C' 카테고리의 다른 글

[C언어] 음수의 변환 과정  (0) 2022.03.06
[C언어] 문자열 초기화 방법  (0) 2022.02.25
[C언어] 얕은 복사 vs 깊은 복사  (0) 2022.02.24
[C언어] #include 2가지 방식  (0) 2022.02.21
[C언어] size_t vs unsigned int  (0) 2022.02.21

+ Recent posts