서로 다른 두 변수의 값을 바꾸기 위해서 보통 'tmp'나 'swap'과 같은 이름의 임시 변수를 하나 더 선언한다.


하지만 이런 추가적인 변수 선언 없이도 XOR 연산이나, 연산자의 우선순위를 이용해 스왑이 가능하다.


1) XOR 연산 - 1

a = 3, b = 7;

a ^= b;

b ^= a;

a ^= b;

printf("a = %d, b = %d", a, b);



2) XOR 연산 - 2

a = 3, b = 7;

a ^= b ^= a ^= b;

printf("a = %d, b = %d", a, b);



3) 연산자의 우선순위

a = 3, b = 7;

b = (a+b)-(a=b);

printf("a = %d, b = %d", a, b);



결과)

a = 7, b = 3







저작자 표시 비영리 변경 금지
신고

'Language > C' 카테고리의 다른 글

간단한 변수 값 스왑 팁  (0) 2014.05.22
C언어로 패스워드 입력(* 마스킹)  (2) 2014.05.19
[C언어] 입력 버퍼 지우기  (0) 2014.03.07
[C언어] 웹 사이트로 접속 요청  (0) 2014.03.07

C언어에서 패스워드값을 입력받으려 할 때 문자 대신 *표시가 나오도록 하는 코드입니다.


#include <stdio.h>


int main()

{

char pass[10];

int i = 0;


/* Case 1

while(1)

{

pass[i]=getch();

if(pass[i] != '\r')

{

printf("*");

i++;

}

else

{

return 0;

}

*/

/* Case 2

while(pass[i]=getch()!='\r') 

printf("*");

i++;

}

*/

return 0;

}


혹은 getch()를 이용하여 입력되는 문자열이 안 보이도록 코딩하는 방법도 있습니다.






저작자 표시 비영리 변경 금지
신고

'Language > C' 카테고리의 다른 글

간단한 변수 값 스왑 팁  (0) 2014.05.22
C언어로 패스워드 입력(* 마스킹)  (2) 2014.05.19
[C언어] 입력 버퍼 지우기  (0) 2014.03.07
[C언어] 웹 사이트로 접속 요청  (0) 2014.03.07
  1. 촘오에요 2017.08.03 15:40 신고

    왜 입력 종료 확인 값을 뉴라인이 아니라 캐리지 리턴을 쓰나요??

    • Favicon of http://pwnbit.kr pwnbit 2017.08.23 09:43 신고

      뉴라인과 캐리지리턴의 차이를 이용하기 위해서입니다. Line Feed를 안 해주기 위해서죠.
      패스워드 입력 이후 커서가 아래줄로 내려가는 것을 막기위해서이구요.

      만약 패스워드가 틀렸을 경우 \n을 쓴다면 Input PW : ******
      ******
      ******
      이런식으로 입력이 되버리겠죠..
      계속해서 Input PW : ***** 이렇게 한 줄로 표현해주기 위해서입니다.




Homepage : http://www.crummy.com/software/BeautifulSoup/


Download BeautifulSoup 4.3.2


설치 방법

4.3.2.tar.gz 압축 풀기 후 bs4 폴더를 Python/Lib로 이동



한글 뷰티플수프 문서 : http://coreapython.hosting.paran.com/etc/beautifulsoup4.html(페이지삭제됨)

영문 뷰티플수프 문서 : http://www.crummy.com/software/BeautifulSoup/bs4/doc/







저작자 표시 비영리 변경 금지
신고
  1. 음.. 2016.04.01 10:15 신고

    링크 클릭이 안되요..T_T)
    복사도 안되고..

배치파일을 이용하면 여러 작업을 한 번에 해결할 수 있다.

하지만 프로그램을 실행할 때 단순히 경로만 넣어주는 것만으로는 두 실행파일을 동시에 실행할 수 없다.

이 경우 하나의 프로그램이 종료된 이후에 다음 작업이 진행된다.

 

이런 문제는 start 명령을 이용하면 해결할 수 있다.

 

C:\Users\Administrator>start /?
지정한 프로그램이나 명령을 실행할 수 있도록 별도의 창을 시작합니다.

START ["제목"] [/D 경로] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA 노드>] [/AFFINITY <16진수 선호도 마스크>] [/WAIT] [/B]
      [명령/프로그램] [매개 변수]

    "제목"      창 제목 표시줄에 나타낼 제목입니다.
    경로        시작 디렉터리입니다.
    B           새 창을 만들지 않고 응용 프로그램을 시작합니다. 응용
                프로그램에서 ^C 처리를 무시합니다. 응용 프로그램이 ^C
                처리를 활성화하지 않는 한 ^Break로만 응용 프로그램을
                인터럽트할 수 있습니다.
    I           현재 환경이 아닌 새 환경을 원래의 환경 값으로
                cmd.exe에 전달합니다.
    MIN         창을 최소화하여 시작합니다.
    MAX         전체 화면을 표시하며 시작합니다.
    SEPARATE    16비트 Windows 프로그램을 별도의 메모리 영역에서 시작합니다.
    SHARED      16비트 Windows 프로그램을 공유 메모리 영역에서 시작합니다.
    LOW         응용 프로그램을 IDLE 우선 순위 클래스에서 시작합니다.
    NORMAL      응용 프로그램을 NORMAL 우선 순위 클래스에서 시작합니다.
    HIGH        응용 프로그램을 HIGH 우선 순위 클래스에서 시작합니다.
    REALTIME    응용 프로그램을 REALTIME 우선 순위 클래스에서 시작합니다.

 

예)

start /d "C:\...\...\" abc.exe

start /d "C:\...\...\" def.exe

 

위 처럼 경로와 실행파일명을 써주면 배치파일을 이용해 두 개의 프로그램을 동시에 실행할 수 있다.








저작자 표시 비영리 변경 금지
신고

C언어로 프로그램 작성 시 간혹 입력 버퍼에 남아있는 값들로 인해 코드가 꼬이는 경우가 발생합니다.

대게 C언어 처음에 배우는 입력문인 scanf로 입력 받을 경우 이러한 현상이 발생하구요.

입력문을 여러번 사용할 경우 다음 입력문에서 입력을 받지 못하고 그냥 넘어가는 현상도 입력 버퍼에 \n이 남아있어서 그렇습니다.


이 경우 입력 버퍼를 초기화시켜주는 작업이 필요한데 OS마다 이 방법이 다릅니다.


윈도우 환경

fflush(stdin);


리눅스 환경

__fpurge(stdin);


이런 현상도 방지하고 안전한 코딩을 위해 가능하면 scanf보다는 gets()를 사용하는 것을 추천합니다.





저작자 표시 비영리 변경 금지
신고

'Language > C' 카테고리의 다른 글

간단한 변수 값 스왑 팁  (0) 2014.05.22
C언어로 패스워드 입력(* 마스킹)  (2) 2014.05.19
[C언어] 입력 버퍼 지우기  (0) 2014.03.07
[C언어] 웹 사이트로 접속 요청  (0) 2014.03.07

[C언어] 웹사이트로 접속 요청하는 C언어 소스


#include <WinInet.h>        //#include <windows.h>보다 이후에 선언되어야 한다.

#pragma comment (lib, "wininet.lib")

#define IP "210.124.110.197"

#define PHP "/war/pwnbit/pwnbit1.php"


//전역 변수 선언

HINTERNET hInternet, hHttp;

HINTERNET hReq;

//전역 변수 선언 끝


//웹 페이지 접속함수 선언

hInternet = InternetOpen("HttpTest", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

if(hInternet == NULL) return -1;


hHttp = InternetConnect(hInternet,IP, 0, "", "", INTERNET_SERVICE_HTTP, 0, 0);

if(hHttp == NULL) return -1;


hReq = HttpOpenRequest(hHttp, "GET", PHP, NULL, NULL, NULL, 0, 0);

HttpSendRequest(hReq, NULL, 0, NULL, 0);


InternetCloseHandle(hHttp);

InternetCloseHandle(hInternet);

//웹 페이지 접속함수 선언 끝



주로 해킹대회에서 프로그램 실행, Auth key 출력 부분에 사용하여 로그를 남기기 위해 사용되는 소스







저작자 표시 비영리 변경 금지
신고

'Language > C' 카테고리의 다른 글

간단한 변수 값 스왑 팁  (0) 2014.05.22
C언어로 패스워드 입력(* 마스킹)  (2) 2014.05.19
[C언어] 입력 버퍼 지우기  (0) 2014.03.07
[C언어] 웹 사이트로 접속 요청  (0) 2014.03.07

일반적으로 Python에서 문자열 출력 시 print문을 사용합니다.


하지만 이 print문은 자동으로 개행이 되기 때문에 여러 줄의 문자열 출력 시 불편하기도 합니다.


이런 문제를 해결하기 위해 다음과 같은 방법들이 있습니다.


- sys 모듈 import 후 sys.stdout.write() 함수 사용

예)

import sys

sys.stdout.write("aaa")

sys.stdout.write("bbb")


결과)

"aaabbb"


- print문 마지막에, 추가

예)

print "aaa",

print "bbb",

print "ccc"


결과)

"aaabbbccc"







저작자 표시 비영리 변경 금지
신고

'Language > Python' 카테고리의 다른 글

Python - File Name Hasher  (0) 2014.12.23
BeautifulSoup 4 설치  (2) 2014.05.08
Python print문 개행제거(sys.stdout.write())  (0) 2014.02.12
파이썬 따옴표의 차이(Python "", '')  (1) 2013.08.15
파이썬 개행문자 제거(Python rstrip)  (0) 2013.08.15
Python password 입력받기  (0) 2013.08.13

파이썬에서는 문자열을 만들 때 ' ' 나 " " 이용합니다.

 

모두 문자열을 표시한다는 것에서는 차이가 없지만 작은 따옴표의 경우 하나의 단위를 표현하는 문자열에,

큰 따옴표는 문법적으로 의미를 두지 않는 문자열을 표현할 때 사용한다고 보시면 됩니다.

 

예를 들면 다음과 같습니다.

 

if compiler == 'python':

...

else:

    print "Python is Snake"

 

예제와 같이 문법적으로 의미를 가지는 단위의 경우 ' '를 사용하고,

크게 의미를 가지지 않는 문자열은 " "를 이용합니다.

 

하지만 어디까지나 관습이기 때문에 각각의 조직이나 개인별 차이가 있을 수 있습니다. = )







저작자 표시 비영리 변경 금지
신고
  1. Favicon of http://limited10.tistory.com 긍정소년 2014.06.11 16:42 신고

    차이가 없네요 ㅎㅎ
    검색하면서 만약 차이가 없으면 아무도 포스팅 해두지 않았지 않을까 했는데 ㅎㅎ 다행이 있네요.
    고맙습니다.

파이썬에서는 print()를 사용하면 자동으로 개행이 이뤄지고,

이런 print()와 값의 반환과 동시에 개행을 하는 함수를 이용하면 화면상에서는 2줄을 개행하게 됩니다.

 

이런 경우 문자열의 가장 마지막에 들어가는 개행문자('\n')을 제거해주면 되는데요.

 

가장 우측의 공백을 제거하는 함수인 rstrip()를 이용하면 됩니다.

 

함수의 인자로 개행문자인 '\n' 을 전달하면 되는데요.

 

제가 프로그래밍 했던 소스를 보겠습니다.

 

import base64

print ("Base64: %s" % base64.encodestring("TEST").rstrip('\n'))

 

 

rstrip('\n')을 사용하게 되면 개행문자를 제거하고 한 번만 개행시킬 수 있습니다. = )







저작자 표시 비영리 변경 금지
신고

Python에서 input()이나 raw_input()으로 문자열을 받을 경우 password 같이 화면에 보이지 않게 입력해야 할 경우가 있는데요.


echo off 기능과 같은 것으로 python에서는 getpass module을 import 시켜서 같은 효과를 볼 수 있습니다.


이 getpass는 기본적으로 'Password: ' 가 prompt로 설정되어 있습니다.


>>> import getpass


>>> pw = getpass.getpass()

Password:                      # 밑줄 부분은 입력이 보이지 않습니다.


만약 다른 prompt를 사용하고 싶으시다면 input()과 마찬가지로 괄호 안에 문자열을 넣어주시면 됩니다.



하지만 암호화까지 지원하지는 않기 때문에 프로그램에서 위와 같이 출력할 경우 password가 그대로 출력됩니다.








저작자 표시 비영리 변경 금지
신고

+ Recent posts

티스토리 툴바