가끔씩 s1 -> s2 인지 s2 -> s1인지 헷갈릴 때가 있다.. 

 

필요한 헤더 : <string.h>

1
2
3
4
5
6
7
//! @brief s2의 문자열을 s1로 복사한다
char *strcpy( char *s1, const char *s2 );
 
//! @brief s2의 문자열을 count(문자갯수)만큼 s1로 복사한다
char *strncpy( char *s1, const char *s2, size_t count );
 
 
cs

 

char *strncpy( char *s1, const char *s2, size_t count );

 - dest에 대한 공간을 확인 하지 않기 때문에 버퍼오버런(buffer overruns) 방지하도록 유의

 - s2에서 null 문자를 만나면, count개의 문자가 쓰여질때까지 s1에 null 문자가 추가된다.

 

번외편. lib을 만들거나 로우레벨 코딩을 할 때 가끔씩 memcpy 쓸때가 있다. 

 

1
2
//! @breif s2의 문자열을 s1으로 n개 만큼 복사한다
void *memcpy(void *s1, const void *s2, size_t n);
cs

그럼 strncpy 와 memcpy 가 하는 일은 같다. 호기심이 생기지 않는가. 직접 속도차이가 궁금하여 테스트 코드를 돌려보았는데 1000바이트의 문자열을 1억번 단순 복사 하는 프로그램이다. 수회 돌려 본 결과 

결과는

평균적으로 strcpy가 2초, memcpy는 1초가 채 안된다.

아래는 짜본 테스트코드

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
31
32
33
34
35
36
37
38
39
40
41
42
#include "stdafx.h"
#include <string.h>
#include <time.h>
 
int main()
{
    char s1[1024];
    char s2[] =
        "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" \
        "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" \
        "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" \
        "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" \
        "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" \
        "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" \
        "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" \
        "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" \
        "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" \
        "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" \
        ;
 
    time_t t1, t2 ,t3;
 
 
    t1 = time(NULL);
    for (int i = 0; i < 100000000; i++)
    {
        memcpy(s1, s2, sizeof(s2));
    }
    t2 = time(NULL);
 
    for (int i = 0; i < 100000000; i++)
    {
        strncpy(s1, s2, sizeof(s2));
    }
    t3 = time(NULL);
 
    printf("strcpy:%u, memcpy:%u\n", t2 - t1, t3 - t2);
 
    getchar();
    return 0;
}
 
cs

 

strncpy vs memcpy 에 대해서 다음에 좀더 이야기를 해보도록 하겠습니다.

 

ps - 위 테스트 코드들에서는 변수 초기값을 할당 하지 않았지만 항상 초기값을 세팅하는 습관이 아주 중요하다고 입이 닳고 마르도록 얘기하고 싶습니다.

 

'까벨로퍼 > 개발 이야기' 카테고리의 다른 글

[Linux/Unix] Tcpdump(2)  (0) 2020.06.29
[Linux/Unix] Tcpdump  (0) 2020.06.29
[Xcode] 단축키 모음  (0) 2020.06.26
[c#] 프로그램에 아이콘 집어넣기  (0) 2020.06.24
[Linux/Unix] iptables 설정  (0) 2020.06.24

 

2종소형 도전기라고 했지만..  사람들이 흔히 말하길 돈주고 산다고 하는 학원엘 다니고 있습니다.

 

하지만 의욕이 없거나, 운동신경이 없거나, 혹은 진짜 재수가 없어서 떨어질 수도 있으니까 (저는 진짜 나무에서 떨어지는 원숭이를 보았습니다..)

 

최소한 돈주고 산다는 말은 떨어지시는 분들에게는 가혹한 얘기일지도 모르겠습니다.

 

코로나로 인해서 원래 하던 취미도 못하고.. (이 취미는 차근차근 소개하도록 하겠습니다.) 정부로 부터 재난지원금 40만원을 수령하고 멀할까 고민하던차에 (물론 몇천원치는 과연 써지는지 편의점에서 확인차..)  2종 소형학원을 등록했습니다.

남자의 로망은 가와사끼!! 고배기량 바이크~ 아닙니까!

 

삼일자동차운전면허학원에 등록했구요.

저얼때 홍보 아닙니다. 그냥 홈페이지에 있는 사진 가져왔습니다.

평이 좋지 않은거 같았지만(시설은 좀 오래된거 같구, 기계가 말썽을 가끔씩 일으키구..ㅎ) 집에서 제일 가까운 거리라.. 머 어딜 가나 사람과 사람이 문제 아니겠습니까? ㅎ 저는 나름 만족하며 연습을 하고 있습니다.

 

첫째날 4시간할때 마지막 5분 남겨놓구 정신줄 놔서 자빠링하고 그 여파로 아직도 허리가..

둘째날 4시간은 익숙해 져서 그런지 곧잘 타게 되더라구요.

장내 기능교육 10시간 + 학과교육 3시간 이수하고 나서 시험치면 되는데 이제 내일 기능 2시간만 하면 다음 주 시험입니다. 걱정되는 건 일주일의 공백이... 과연 시험때 감을 잃을지... 안 잃을지.. 저도 무척 궁금하네요.ㅎ

 

다음 시간엔 따끈따끈한 면허증 사진으로 인증하도록 하겠습니다.

 

아 그리고 오토바이는 액시브 250cc, 아퀼라300이 있더라구요. 같이 연습하시는 다른분들은 아퀼라가 더 다루기 쉽다고 하네요. 저는 첨부터 액시브로 해서 ㅎ 

 

012
삼일자동차학원 전경

 

 

1. 기본형 도지

    다음 거래일의 주가를 판단하기 어려움

    추세의 변화를 예고하는 신호 정도

 

2. 비석형 도지

    윗수염의 길이가 길수록 하락할 가능성이 커짐

 

3. 잠자리형 도지

    주가추세의 바닥 시점에서 나타나면 이후 상승 반전을 기대 할 수 있음

 

단순 참고일 뿐이다...

 

'까트라이프 > 스터디룸' 카테고리의 다른 글

Xing DevCenter34 [저장용]  (0) 2020.07.09
조건검색식 출력 테스트  (0) 2020.07.08
단타 매매기법  (1) 2017.07.11
2017 대선 정책주에 숟가락 얹기  (0) 2016.09.05
2017 대선주에 숟가락 얹기  (0) 2016.09.02

 

수시 업데이트중..

 

*** 편집 ***

컨트롤 + 커맨드 + 좌우 방향키 : 페이지 이전/이후 이동

컨트롤 + i : 자동 들여쓰기 적용

커맨드 + alt + Enter : 창 이중 분할

커맨드 + Enter : 단일 창으로 변경

 

*** 빌드 ***

커맨드 + Shift + K  : 프로젝트 클린

커맨드 + B  : 프로젝트 빌드

커맨드 + R  : 프로젝트 실행

 

*** 디버깅 ***

커맨드 + \ : 브레이크 포인트

F6 : 다음라인

F7 : 현재 라인 내부 진입

F8 : 현재 함수에서 나가기

 

*** 탐색 ***

커맨드 + Shift + F     :     파인드 창으로 강제 이동

커맨드 + Shift + O     :     프로젝트/클래스/함수 내 검색

커맨드 + F : 현재 창에서 검색

커맨드 + G : 검색된 결과 순차 검색

 

*** UI ***

커맨드 + 0 : 프로젝트 윈도우 숨기기 / 펼치기

커맨드 + 1 : 프로젝트 파인더 표시

커맨드 + 4 : 프로젝트 워닝/에러 표시

커맨드 + 7 : 브레이포인트 모두 표시

 

 

커맨드 + S : 시뮬레이터창 캡쳐

 

1. 폼 (WinForm) 타이틀에 아이콘 넣기

   새로운 윈폼 프로젝트를 하나 만들어서 폼 디자인은 원하시는대로 하세요.

 

붉은색 박스 안의 아이콘을 추가할 겁니다.

 

WinForm의 속성창에서 Icon 항목을 찾아 붉은 박스를 클릭

 

미리 만들어 두었던 아이콘을 찾아 추가해줍니다. 무료 icon을 다운 받을 수 있는 사이트가 많으니 구글링 하셔도 됩니다.

 

icon이 적용된 것을 확인. 주의! - 폼마다 설정해 줘야 합니다.

 

2. 프로그램의 아이콘을 설정하기

   이부분은 쉽습니다. 솔루션 탐색기 > 마우스 우클릭 > 속성을 누르시면 아래와 같은 화면이 표시됩니다.

   또는 메뉴 > 프로젝트(P) > 프로젝트 속성 (단축키 ALT+F7) 

   응용프로그램 항목에서 리소스 부분의 붉은 박스를 클릭해서 아이콘을 찾아서 추가 해주면 됩니다.

 

 

어려서부터 우리집은 가난했었고..

남들 다하는 외식 한번 한적이...

 

가난의 기준이 무엇인지는 모르겠지만.. 한때 우리집이 가난했었던 것(?) 같은 느낌이 든다.

부유하다 -> 먹을것을 살 수 있다 -> 외식도 자주 하겠지 -> 고기도 자주 먹겠지 -> 성장/발육에 도움이 된다 -> 키가 큰다

나는 키가 작다..ㅠ

 

어려서부터 간장+참기름+밥 이렇게 비벼 먹는걸 참 좋아했습니다. 가끔씩 참기름이 없어서 식용유로..ㅎ

저는 요리를 잘 못해요. 혼자 사는 생활이 오래되고 집에서 해먹는걸 별로 좋아하지 않아서 그냥 외식을 합니다.

 

하지만 가끔씩은 이렇게 만들어 먹기도 합니다.

스팸 + 햇반 + 계란 + 간장 

 

요리법 ? = 후라이팬 달구고 식용유 조금 붓고 스팸 + 햇반 + 계란 다 때려 넣구 볶다가 불 끄기 1분 전에 간장 조금

 

 

밥먹을땐 항상 왼손에 리모콘이죠!

 

+ Recent posts