서로 다른 두 변수의 값을 바꾸기 위해서 보통 '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 : ***** 이렇게 한 줄로 표현해주기 위해서입니다.

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

+ Recent posts

티스토리 툴바