Visual Studio 2015에서 테스트 되었습니다.

 

CTRL + M + O : 전체 폴딩 하기

CTRL + M + L :  전체 폴딩 풀기

CTRL + M + M : 현재 섹션에서 폴딩 하기 / 풀기

 

 

 

예제)

 

아래와 같은 문자열들이 있을 때,

ID01---0---1---  

ID02--0-------1 

-----ID03--0--1

 

위의 문자열들을 아래와 같이 변경하고 싶다면 (반복된는 문자열들을 하나만 남겨두고 모두제거 하고 싶다면)

ID01-0-1-

ID02-0-1

-ID03-0-1

 

string result = Regex.Replace(str, "-+", "-");

 

 

만약 양쪽 끝에 발견되는 반복되었던 문자를 제거할려면 Trim 을 사용.

ID01-0-1

ID02-0-1

ID03-0-1

 

string result2 = result .Trim('-');

 

 

윈폼(WinForm)의 TextBox,RichEditBox 등 컨트롤에서 다음과 같이 문자열이 입력되어 있을 때,

 

WinForm의 RichEditBox에 입력한 단어들 컨트롤 이름을 rtbColor 이라고 하자.

개행을 제거하고, 공백을 제거 하고 싶을 때,

다시 말해서 결과 문자열이 '노란색,하늘색,붉은색,푸르스름한색' 으로 출력되게 하고 싶을 때,

 

string keyword = rtbColor.Text

char[] except = { '\n', ' ' };

keyword = keyword.Trim(except);

 

MSDN 의 설명을 보면 Trim()은 세가지의 Overload 펑션을 제공하고 있습니다.

 

Trim(Char[])

현재 문자열에서 배열에 지정된 문자 집합의 선행 항목과 후행 항목을 모두 제거합니다.

Trim(Char)

현재 문자열에서 문자의 선행 인스턴스와 후행 인스턴스를 모두 제거합니다.

Trim()

현재 문자열에서 선행 공백과 후행 공백을 모두 제거합니다.

 

그럼 선행/후행 모두가 아니라 후행에 나오는 문자만 제거하기 위해서는 ?

 

TrimEnd 를 사용하시면 됩니다.

설치

설치하기에 앞서 닷넷 런타임 모듈이 설치가 되어 있어야합니다. 프로그램 설치 후 실행시 런타임 오류가 발생하는 경우에는 아래 페이지에서 닷넷 프래임웍 4.5.2 를 설치해주시고 다시 실행해 주시기 바랍니다.

https://dotnet.microsoft.com/download/dotnet-framework/net452

 

Download .NET Framework 4.5.2 | Free official downloads

Downloads for building and running applications with .NET Framework 4.5.2 . Get web installer, offline installer, and language pack downloads for .NET Framework.

dotnet.microsoft.com

 

NePanKing-1.0.0.msi 인스톨 프로그램을 다운받아서 실행하면 아래와 같은 인스톨러가 실행됩니다. 
다음 > 다음 진행하시면 됩니다. 
기본 설치되는 디렉토리는 [C:\Program Files (x86)\NePanKing\] 입니다.

 

인스톨러 시작화면
바탕화면에 바로가기가 설치됩니다.

  • 제거

    제어판 > 프로그램 및 기능 메뉴로 들어간 다음 NePanKing 을 찾아 마우스 우클릭 해서 제거 하시면 됩니다.

마우스 우클릭 해서 제거 하시면 됩니다.

 

 

 

 

 

 

 

  •  시작하기에 앞서

현재 버전은 v1.0.1 입니다. 

! 프로그램 사용은 누구나 메일 인증만 되면 자유롭게 사용 할 수 있습니다. 

더 좋은 프로그램으로 보답 할 수 있도록 노력하도록 하겠습니다.

여러분들의 따뜻한 관심과 애정 부탁드립니다. 

 

  • 프로그램 시작하기

  프로그램을 설치 후 사용하기 위해서는 이메일 인증이 필요합니다.

등록하기 버튼을 클릭하여 정상적으로 요청이 되었는지 확인 후 (수초 정도 걸릴 수 있습니다)

본인의 이메일 계정에 로그인 하여 수신된 메일을 확인 해 주세요.

  주의!! PC당 하나의 이메일 계정만 등록하여 사용할 수 있습니다. 이메일을 변경하거나 새로운 PC에서 해당 이메일을 이용하여 프로그램을 사용하고자 한다면 개발자에게 연락해 주세요. (ososoi@daum.net)

 

메일 인증이 완료되면 본격적으로 프로그램을 사용하실 수 있습니다. 

프로그램은 심플 합니다. (simple is best !?)

 

무료로 사용으로도 충분합니다^^

일반 사용자 후원해주신 사용자
상품수 검색 제한  없음 제한 없음
상품수 검색 쇼핑사이트 (네이버) 제한 없음 (네이버,11번가,쿠팡)
엑셀 출력 X 엑셀 출력 지원

 

번호표시가 너무 거지 같네요.. 죄송합니다.

1. 키워드를 입력하는 곳입니다. 최대 5개까지 검색 가능하며 콤마(,) 나 앤터키(Enter) 로 키워드를 구분합니다.

2. 입력한 키워드로 키워드에 대한 조회수를 출력하기 위한 검색 버튼입니다.

3. 키워드에 대한 조회수 결과 리스트입니다. (정렬지원)

4. 상품조회 한도 : 1 ~ 300 건을 조회 가능, 또는 All(전체 : 사용시 주의!! 상당한 시간이 걸릴 수 있음.부작용.)

5. 조회대상 사이트 네이버, 11번가, 쿠팡을 선택하여 상품수 를 출력하는 버튼입니다.

    (멀티스레드 기반으로 검색 속도를 향상시켰습니다.)

6. 네이버에 등록되어 있는 키워드에 대한 전체 상품수입니다. 클릭시 네이버 쇼핑몰로 이동 (정렬지원)

7. 키워드의 조회수 대비 네이버 전체 상품의 비율을 나타냅니다. (정렬지원)

   (일반적으론 값이 적을 수록 조회수는 많은데 상품은 적다는 뜻)

8. 6과 마찬가지이며 11번가 대상입니다.

9. 7과 마찬가지이며 11번가 대상입니다.

10. 11. 위와 같고 대상은 쿠팡입니다.

 

사용상 버그가 있을 수 있습니다.

노여워 하지 마시고 제게 리포트를 해주세요. 그리고 조급해 하지 마시고 기다려 주시면 감사하겠습니다 ^^

 

  • 주의사항.

- 사용하시기 전 반드시 네이버광고 페이지에서 사용키를 발급 받으셔야합니다.  사용키 획득은 아래링크에서 자세하게 확인 할 수 있습니다.
[네이버 광고 키워드 검색량 프로그램 소개 및 키 발급 (네판왕)]

 

- 한대의 PC에 하나의 Email 만 등록 가능합니다. (다른 PC에서 같은 Email 로 등록시 등록 안됩니다. one pc-one user)

- 검색어 검색 호출 자체에 대한 일일 최대치가 정해 져 있습니다. 하루 최대 25,000건

- PC의 시간은 표준시간과 동기화가 되어 있어야 합니다. 시간이 표준시간과 차이가 날 경우 (핸드폰 시간과 비교하면 될 듯 합니다) 네이버에서 블락을 시킵니다.

 - 각 쇼핑몰은 계속해서 진화 하고 웹페이지가 업데이트가 됩니다.  사용중에 어느날 갑자기 상품 검색이 안될 수도 있습니다. 이럴 경우 리포팅을 해주시면 문제해결을 위해 노력하도록 하겠습니다. (이미 한번... 재코딩을...)

 

설치프로그램을 다운 받으시려면 아래 링크를 눌러주세요.

네이버 광고 키워드 검색량 프로그램 설치프로그램 (네판왕)

 

네이버 광고 키워드 검색량 프로그램 설치프로그램 (네판왕)

설치 설치하기에 앞서 닷넷 런타임 모듈이 설치가 되어 있어야합니다. 프로그램 설치 후 실행시 런타임 오류가 발생하는 경우에는 아래 페이지에서 닷넷 프래임웍 4.5.2 를 설치해주시고 다시 실

ososoi.tistory.com

 

 

 

 

1. 키를 먼저 발급을 받습니다.  이미 발급 받았고 키를 알고 있다면 (2) 로 가주세요.

 

구글 / 네이버 검색창에서 '네이버광고' 를 검색해서 네이버 광고 페이지에 접속합니다.

https://manage.searchad.naver.com 

 

네이버 광고

 

manage.searchad.naver.com

 

네이버광고 페이지 접속 화면

 

계정이 없다면 계정을 등록하고 [도구] -> API 사용관리 항목으로 들어갑니다. API 사용관리 화면에서

내계정, 엑세스라이선스, 비밀키 이 세가지를 확인합니다. 

 네이버 광고 시스템의 api 사용관리 화면

 

2. 발급 받은 혹은 가지고 있는 각 라이선스, 비밀키, 계정(customid) 을 프로그램에 저장합니다.

 

네판왕 프로그램의 오픈키 설정 메뉴에서 각 항목에 복사해 줍니다.

API_KEY = 엑세스라이센스

SECRET_KEY = 비밀키

CUSTOMER_ID = 내계정(CUSTOMER_ID)

 

 

오픈키 설정 화면입니다.

 

 

설치프로그램을 다운 받으시려면 아래 링크를 눌러주세요.

네이버 광고 키워드 검색량 프로그램 설치프로그램 (네판왕)

 

네이버 광고 키워드 검색량 프로그램 설치프로그램 (네판왕)

설치 설치하기에 앞서 닷넷 런타임 모듈이 설치가 되어 있어야합니다. 프로그램 설치 후 실행시 런타임 오류가 발생하는 경우에는 아래 페이지에서 닷넷 프래임웍 4.5.2 를 설치해주시고 다시 실

ososoi.tistory.com

 

 

[C#] Visual Studio Installer 사용하기 (1) 

 

에서 만든 인스톨러로 수정된 프로그램의 재배포를 할 때 정상적으로 처리가 되지 않는다.

이미 프로그램을 배포했고, 프로그램 수정이 이루어져 새로운 버전으로 배포해야 할때... 

 

setup 프로젝트의 속성창에서

DetectNewerInstalledVersion 이 True로 되어 있는지 확인

RemoveOreviosVersions 을 False -> True 변경

 

 

실제로 새로운 버전의 프로그램을 적용하기 위해서 원 프로젝트의 속성창에서 [응용프로그램] -> [어셈블리정보] 에서 

버전정보를 올려주자

 

[C#] Visual Studio Installer 사용하기 (1)

 

 

같이 공부하는 마음으로, 시작해봅시다.

 

1. 기존에 프로젝트가 준비 되어 있으면 바로 다음단계로(2) 이동. 필자는 실행하면 윈폼창이 뜨는 프로그램을 샘플로 작성하였습니다.

설치할 프로그램을 준비

2. [솔루션] 창에서 오른쪽 마우스 클릭 -> [추가] -> [새 프로젝트]를 차례대로 클릭 하고 새 창이 뜨면

   [Visual Studio Installer] -> [Setup Project] 선택

   인스톨 프로그램의 프로젝트 명을 입맛대로 변경 후 확인 하면 (4)로

   Visual Studio Installer 설치가 되어 있지 않으면 안보일 수 있습니다. 그럼 (3) 으로 이동

 

3. Visual Studio Installer 가 설치가 되어 있지 않은 경우만 보세요

   상단 메뉴의 [도구] -> [확장 및 업데이트] -> [온라인] -> 검색어 Visual Studoi Installer 를 검색하고 설치.

   필자는 이미 설치 했기 때문에 [설치됨] 항목에 나타납니다. 아래 사진에 보이는 Visual Studio Installer Projects 입니다.

 

4. 아래와 같은 화면이 나오면 된겁니다

5. 그럼 [Application Folder] 를 마우스 우클릭 하고 [Add] -> [프로젝트 출력] 을 선택하면 [프로젝트 출력 그룹 추가] 라는 폼이 뜨는데 이미 프로젝트가 있으면 선택되어 져서 나올 껍니다. [확인]

그럼 기본 출력란이 바뀌었는지 확인 하고 솔루션 창에서 Installer 프로젝트를 빌드 하고 정상적으로 빌드 됐는지 확인 하면 됩니다.

 

6. 디렉토리에 setup.exe 프로그램이 정상적으로 만들어졌는지 확인하고 실제로 설치를 해봅시다.

   ~.msi 파일로 설치해도 됩니다. 

   주의점은 원 프로젝트가 빌드가 되어 있어야 하고, debug, release 모드를 구분하기 때문에 실제 배포시에는 release 로 빌드하시는게 좋겠죠.

 

다음에는 좀더 디테일 하게 installer 프로젝트를 다뤄보고 알려드리도록 하겠습니다.

 

[C#] Visual Studio Installer 사용하기 (2)

 

(base) [root@guest ~]# netstat
-bash: netstat: command not found

자.. 당황하지 말고~

(base) [root@guest nshopassist]# yum -y install net-tools
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
Resolving Dependencies
--> Running transaction check
---> Package net-tools.x86_64 0:2.0-0.25.20131004git.el7 will be installed
--> Finished Dependency Resolution
...
...
Running transaction
  Installing : net-tools-2.0-0.25.20131004git.el7.x86_64                                                                              1/1
  Verifying  : net-tools-2.0-0.25.20131004git.el7.x86_64                                                                              1/1

Installed:
  net-tools.x86_64 0:2.0-0.25.20131004git.el7

Complete!
(base) [root@guest nshopassist]# netstat -h
usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}
       netstat [-vWnNcaeol] [<Socket> ...]
       netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]

help 명령이 잘되는 것까지 확인.

  • openssl 설치 확인 (설치가 되어 있지 않다면 openssl 설치 필요)
(base) [root@guest ~]# openssl version
OpenSSL 1.1.1g  21 Apr 2020

 

  • rsa 키파일을 생성한다
(base) [root@guest ~]# openssl genrsa 1024 > rsa.key
Generating RSA private key, 1024 bit long modulus(2 primes)
................+++++
..................+++++
e is 65537 (0x010001)

 

  • cert 파일을 생성한다
(base) [root@guest ~]# openssl req -new -x509 -nodes -sha256 -days 365 -key rsa.key > django.cert
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ko
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:seoul
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ososoi
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:ososoi
Email Address []:ososoi@daum.net
(base) [root@guest ~]#

-x509

이 옵션은 인증서 요청 대신 자체 서명 된 인증서를 출력합니다. 일반적으로 테스트 인증서 또는 자체 서명 된 루트 CA를 생성하는 데 사용됩니다

 

-days n

옵션을 사용하는 경우 인증서를 인증 할 일 수를 지정합니다. 기본값은 30 일입니다.

 

  • django 프로젝트의 setting.py 을 열어 sslserver 앱을 추가한다.
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'sslserver',
]

 

  • 서버를 실행한다. 필자는 이미 443포트를 사용하고 있기 때문에, 8443 포트를 열어서 사용하도록 하였다.
(base) [root@guest nshopassist]# python manage.py runsslserver --certificate django.cert --key rsa.key 0.0.0.0:8443
Watching for file changes with StatReloader
Validating models...

System check identified no issues (0 silenced).
June 29, 2020 - 21:43:13
Django version 3.0.3, using settings 'nshopassist.settings'
Starting development server at https://0.0.0.0:8443/
Using SSL certificate: django.cert
Using SSL key: rsa.key
Quit the server with CONTROL-C.

 

Q) 특정 호스트를 지정하기 어려운경우, 점검을 해야할 시간을 특정 하지 못할 때, 어떤 패킷이 랜덤하게 들어올때 , 다량의 패킷을 tcmpdump 떠야 할때 어떻게 해야할까 ?

 

위와 같은 상황에서 좀더 tcmpdump 를 유용하게 쓸 수 있는 방법에 대해서 알아봅시다.

 

사용하게된 옵션들은 아래와 같습니다.

-C : 파일 사이즈 The units of file_size are millions of bytes(1,000,000 bytes, not 1,048,576 bytes).  

-W : 최대 파일 갯수

-Z root : 파일을 나누어 남길때 권한 오류가 발생한다면 추가

-i any : 모든 인터페이스

 

icmp 패킷만, 10MB의 크기로, 최대 10개의 파일을 생성하게 하고 , 계속 로테이션 되게 로그를 쌓고 싶을 경우 아래와 같이 사용합니다. 캡쳐된 내용이 capfile0, capfile1, capfile2... 으로 9까지 생기고 계속 로테이션 되면서 기록됩니다.

$ tcpdump icmp -C 10 -W 10 -w capfile

 

권한오류가 발생 할 수도 있습니다. 그럴 경우 마지막에 -Z root 을 추가하여 루트권한으로 실행하도록 합니다.

 tcpdump -i any icmp -C 10 -W 10 -w capfile -Z root

 

예제추가) 백그라운드로, 모든 인터페이스, udp 161 포트, 소스아이피 또는 목적지아이피가 10.0.0.1 , 파일은 10개 크기는 20MB씩 로테이션이 되도록 하고 파일명은 dump~ , 루트권한으로 실행

 $ nohup tcpdump -i any src 10.0.0.1 or dst 10.0.0.1 and udp port 161 -W 10 -C 20 -w dump -Z root &

 

위를 잘 활용하면, 네트워크의 문제 (ping 유실, 네트워크 부하, 이상 패킷 흐름) 등의 모니터링을 하는데 도움을 줄 수 있다고 생각합니다. 실제로 현업에서 며칠에 한번씩 랜덤하게 ping 유실되는 것을 증명할 때 사용하기도 했습니다.  디스크 용량을 확인하고 적절하게 계산하여 원하는 만큼의 기간동안의 패킷을 로깅 할 수 있습니다.

 

같이 보기 [Linux/Unix] Tcpdump 

 

[Linux/Unix] Tcpdump

개요  명령 줄에서 실행하는 일반적인 패킷 가로채기 소프트웨어이다. 사용자가 TCP/IP뿐 아니라, 컴퓨터에 부착된 네트워크를 통해 송수신되는 기타 패킷을 가로채고 표시할 수 있게 도와 준

ososoi.tistory.com

 

  • 개요

 명령 줄에서 실행하는 일반적인 패킷 가로채기 소프트웨어이다. 사용자가 TCP/IP뿐 아니라, 컴퓨터에 부착된 네트워크를 통해 송수신되는 기타 패킷을 가로채고 표시할 수 있게 도와 준다. BSD 허가서를 통해 배포되는[2] tcpdump는 자유 소프트웨어이다.

tcpdump는 리눅스, 솔라리스, BSD, 맥 OS X, HP-UX, AIX 따위의 대부분의 유닉스 계열 운영 체제에서 동작하며 여기서 libpcap 라이브러리를 사용하여 패킷을 포획한다. 윈도용 tcpdump 이식판으로는 WinDump가 있으며, 이는 libpcap의 윈도 이식판인 WinPcap을 이용한다.  - wiki 백과

 

<조건식(expression)>

옵션의 제일 마지막인 조건식은 어떤 패킷들을 출력할지를 선택하는데 쓰인다. 조건식이 주어지지 않는 다면 모든 패킷들이 그 대상이 될 것이다. 일단 주어지면, 아무리 패킷들이 많아도 조 건식에 부합하는 패킷만을 출력한다.

조건식들은 하나 또는 몇 개의 primitive들로 구성되어 있다. primitive들은 보통 하나 혹은 몇개의 qualifier들 다음에 오는 하나의 값으로 이루어진다. Qualifier들은 모두 3 종류이며 다음과 같다.

 

type : 주어진 값의 종류가 무엇인지를 나타낸다. 가능한 type들은 'host', 'net', 'port'가 있다. type이 없는 값들은 type을 host라 가정한다.

 

dir : id로 부터의 어떤 특정한 전송 방향을 나타낸다. 가능한 방향은 'src', 'dst', 'src or dst', 'src and dst'이다. 만약 방향이 정해지지 않았다면, src or dst라 가정한다. "For `null' link layers (i.e. point to point protocols such as slip) the inb ound and out bound qualifiers can be used to specify a desired direction."

 

proto : 매칭을 특정 프로토콜에 한해서 수행한다. 가능한 프로토콜들은 ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp, udp이다. 만약 프로토콜이 명시되지 않았다면, 해당하는 값의 type에 관련된 모든 프로토콜들이 그 대상이 된다.


  • 사용예

<옵션>
-c Number : 제시된 수의 패킷을 받은 후 종료한다.
-i device : 어느 인터페이스를 경유하는 패킷들을 잡을지 지정한다. 지정하지 않을 경우 가장 낮은 번호를 가진 인터페이스를 선택한다(이 때 loopback은 제외된다).

-i any : 인터페이스를 구분 하지 않는다. 

-w tcpdump.log : 결과를 tcpdump.log 파일에 저장함.(임의로 지정가능)

-s 1500 :캡쳐할 패킷의 길이로서 1500은 패킷의 전체길이를 의미하므로 모든 패킷을 캡쳐하게됨.

tcp port 22 : 캡쳐할 대상 프로토콜과 포트를 지정한 것으로 tcp 포트 22번으로 송수신되는 데이터를 캡쳐하게 됨.

host 192.168.0.1 :192.168.0.1 서버와 송수신되는 데이터를 대상으로 캡쳐함.

 

A와 B사이의 주고받는 icmp 패킷을 캡쳐할 경우

tcpdump host A and host B and icmp

10.0.0.1 과 10.0.0.13 의 icmp 패킷 캡쳐

여기서 조금더 응용을 하여 A와 B의 주고받는 포트 161을 사용하는 udp 패킷을 캡쳐해서 파일로 저장한다면,

tcpdump -w tcpdump.log host A and host B and udp port 161

10.0.0.1과 10.0.0.22 사이의 udp 161 포트를 캡쳐하여 tcpdump.log 파일에 기록

파일로 저장하였기 때문에 화면에 출력되는 것은 없다.

임의의 패킷을 전송한 후 만들어진 tcpdump.log 파일을 열어보자. 아래와 같이 바이너리 형태로 저장되기 때문에 내용을 알 기 어렵다. 

이를  옵션 -r 을 사용하여 파일을 확인해보자. 

tcpdump -r tcpdump.log

-r 옵션을 사용하여 파일을 열어보면, 10.0.0.1 에서 10.0.0.22 로 snmp 프로토콜 sysUpTime을 요청하였고 그에 대한 응답을 주는 것을 확인 할 수 있다.

hex코드로 출력하길 원한다면

tcpdump -Xqnr tcpdump.log

 

이는 tcpdump 의 아주 작은 조각에 불과합니다. 더 자세한 것은 manpage를 적극 활용 보면 좋겠습니다.

 

다음번에 tcpdump 에 대해서 또 유용하게 쓸수 있는 기능을 소개해 보겠습니다.

 

 

 

같이 보기 [Linux/Unix] Tcpdump(2)

 

[Linux/Unix] Tcpdump(2)

Q) 특정 호스트를 지정하기 어려운경우, 점검을 해야할 시간을 특정 하지 못할 때, 어떤 패킷이 랜덤하게 들어올때 , 다량의 패킷을 tcmpdump 떠야 할때 어떻게 해야할까 ? 위와 같은 상황에서 좀더

ososoi.tistory.com

 

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

[Django] openssl 인증서로 https 사용  (2) 2020.06.29
[Linux/Unix] Tcpdump(2)  (0) 2020.06.29
[c/c++] strcpy,strncpy,memcpy  (0) 2020.06.28
[Xcode] 단축키 모음  (0) 2020.06.26
[c#] 프로그램에 아이콘 집어넣기  (0) 2020.06.24

 

가끔씩 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

 

수시 업데이트중..

 

*** 편집 ***

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

컨트롤 + 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) 

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

 

 

+ Recent posts