336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. string.h에 포함되어 있다.


2. 두문자열이 같으면 0을 리턴한다.


3. 두문자가 다르면 0이 아닌 값을 리턴한다.



strcmp 의 경우


앞의 문자열과 두번째 문자열을 하나하나 검사하는 도중 다른곳이 발견되면 멈춰서 그곳에 문자값을 아스키코드를 기준으로 검사하여


앞의 만자값이 크면 1 뒤의 아스키코드값이 크면 -1을 리턴한다.



_stricmp 의경우


먼저 대소 문자를 구분하지 않는다. 앞으문자열과 뒤의 문자열을 문자하나하나 검사하다 다르면 그곳의 값을 아스키코드값으로 리턴한다.


알파벳경우 소문자.




소스코드: main.c

#include <stdio.h>

#include <string.h>


#define MAX 256

int main(void)

{

char *pPassword = "Junmozzi";

char szBuffer[256] = { 0, };


int nPassControl = 1;


//문자 하나 하나 검색하면서 틀린곳이 발견되면

//그것의 문자값(아스키코드값을 비교) 첫번째 문자가 값이 크거나 같으면 1, 두번째 문자값이 크면 -1을 리턴한다. 

//모두 일치하면 0을 리턴한다.

while (nPassControl)

{

printf("password : ");

gets_s(szBuffer, sizeof(szBuffer));


nPassControl = strcmp(pPassword, szBuffer);


printf("%d ", nPassControl);


if (nPassControl == 0)

{

puts("Match password");


}

else if (nPassControl == 1 || nPassControl == -1)

{

puts("Wrong password");

}

}


nPassControl = 1;


while (nPassControl)

{

printf("password : ");

gets_s(szBuffer, sizeof(szBuffer));


nPassControl = _stricmp(pPassword, szBuffer);//대소문자 구분없이 문자값이 맞으면 0을 다르면 1을


printf("%d, %c ", nPassControl, nPassControl);


if (nPassControl == 0)

{

puts("Match password");


}

else if (nPassControl == 1 || nPassControl == -1)

{

puts("Wrong password");

}

}


return 0;

}





결과


#c언어, #c언어입문, #프로그램입문, #strcmp, #_stricmp

'Programing - C > C Basic grammar ' 카테고리의 다른 글

061 strncmp, _strnicpm 062 strcat, strncat, strcat_s, strncat_s  (0) 2017.07.28
060 strcmp, _stricmp 구현해보자  (0) 2017.07.27
058 strcpy 구현해보기  (0) 2017.07.27
057 strcpy, strcpy_s  (0) 2017.07.27
056 puts  (0) 2017.07.27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

목표 : 


string.h를 사용하지 않기 위해서


strycpy, strcpy_s 를 직접 구현해 보고 차이점을 확인해보자.



소스코드 :

#include <stdio.h>


char* strcpy(char *pDest, char* pSource);

char* strcpy_s(char *pDest, int BufferSize, char* pSource);


int main(void)

{

char*pSource = "오늘의 포스팅!!\n";

char Buffer1[256] = { 0, };

char Buffer2[256] = { 0, };


strcpy(Buffer1, pSource);

strcpy_s(Buffer2, sizeof(char) * 256, pSource);



printf(" buffer1의 내용 : %s", Buffer1);

printf(" buffer2의 내용 : %s", Buffer2);




return 0;

}


char* strcpy_s(char *pDest, int BufferSize, char* pSource)

{

int count = 0;

for (count = 0; count < BufferSize; count++) // 문자열 끝을 알리는 널이 없더라도 버퍼 사이즈를 카피하기때문에 문제가 

{                                                  // 되지 않는 안전장치가 들어 있는 셈입니다!!

pDest[count] = pSource[count];

if (pSource[count] == '\0')//문자열 끝이라면

{

break;

}

}


return pDest;

}



char* strcpy(char *pDest, char* pSource)

{

int count = 0;

for (count = 0; ; count++) // 만약 문자열 끝이 없다면 무한루프돌고 그러다 버퍼 사이즈를 넘겨 오버플로가 되서...ㅠㅠ

{                             // 프로그램이 죽습니다...

pDest[count] = pSource[count];

if (pSource[count] == '\0')//문자열 끝이라면

{

break;

}

}


return pDest;

}




결과


#c언어입문, #c언어, #프로그램입문,#strcpy구현, #strcpy_s구현

'Programing - C > C Basic grammar ' 카테고리의 다른 글

060 strcmp, _stricmp 구현해보자  (0) 2017.07.27
059 strcmp, _stricmp  (0) 2017.07.27
057 strcpy, strcpy_s  (0) 2017.07.27
056 puts  (0) 2017.07.27
055 gets, gets_s  (0) 2017.07.27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. string.h 에 포함 되어 있다.


2. 문자열 복사한다.


3. visual studio 2010 이상 컴파일러 에서는 _s 버전을 사용을 권장한다.


4. 원형


char * strcpy (char*  _Dest, const char * _Source);


char* strcpy_s(char* _Dest,  rsize_t _SizeInBytes, const char * _Source);



소스 코드 : main.c

#include <stdio.h>

#include <conio.h>

#include<string.h>


int main(void)

{

unsigned char string[256] = { 0, };

unsigned char buffer[256] = { 0, };

int buffer_size = 0;

//unsigned char *p = "Hello World\n";


buffer_size = sizeof(string);


printf("문자열 입력 : ");

gets_s(string, buffer_size);


puts("string copy!");


strcpy_s(buffer, sizeof(string), string);


puts(buffer);



return 0;

}





결과:


#c언어, #c언어입문, #프로그램입문, #strcpy, #strcpy_s

'Programing - C > C Basic grammar ' 카테고리의 다른 글

059 strcmp, _stricmp  (0) 2017.07.27
058 strcpy 구현해보기  (0) 2017.07.27
056 puts  (0) 2017.07.27
055 gets, gets_s  (0) 2017.07.27
054 printf를 이용하자  (0) 2017.07.27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

목표 : 

문자열을 출력하고 자동 개행되는 함수 puts를 활영하여 입력 받은 키값을 검사하여 문자열을 출력하자.

(puts 는 put string의 약자)


소스코드 : main.c

#include <stdio.h>

#include <conio.h>


int main(void)

{

unsigned char ch = 0;


while (1)

{

ch = _getch();


if (ch == 'x' || ch == 'X')

{

break;

}

else if (ch == 'W' || ch == 'w')

{

puts("Move Up");

}

else if (ch == 'S' || ch == 's')

{

puts("Move Down");

}

else if (ch == 'A' || ch == 'a')

{

puts("Move Left");

}

else if (ch == 'D' || ch == 'd')

{

puts("Move Right");

}

}


puts("stop");

return 0;

}



결과


#c언어, #c언어입문, #프로그램입문, #puts, #putstring

'Programing - C > C Basic grammar ' 카테고리의 다른 글

058 strcpy 구현해보기  (0) 2017.07.27
057 strcpy, strcpy_s  (0) 2017.07.27
055 gets, gets_s  (0) 2017.07.27
054 printf를 이용하자  (0) 2017.07.27
053 scanf, scanf_s  (0) 2017.07.27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

목표 : 문자열을 입력 받아 메모리에 복사하고 그내용을 출력한다.


주의: visual studio 2010 version 이상은 gets_s을 사용하길 권하며 파라메터 값으로 버퍼의 사이즈를 추가해줍니다.


소스 코드 : 

#include<stdio.h>

#define BUFFER_MAX 256

int main(void)

{

char buffer[BUFFER_MAX] = { 0, };


printf("메모리에 카피할 문자열 입력 : ");


gets_s(buffer, sizeof(char)*BUFFER_MAX);


printf("Success memory copy!!\n");

printf("Copy Data : %s \n", buffer);


return 0;

}



결과


#c언어, #c언어입문, #프로그램입문, #gets, #gets_s, #문자열입력받기

'Programing - C > C Basic grammar ' 카테고리의 다른 글

057 strcpy, strcpy_s  (0) 2017.07.27
056 puts  (0) 2017.07.27
054 printf를 이용하자  (0) 2017.07.27
053 scanf, scanf_s  (0) 2017.07.27
052 putch, _putch  (0) 2017.07.27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

목표 : printf를 이용해서 왼쪽붙여쓰기 오른쪽 붙여쓰기를 해보자


소스코드 : 

#include<stdio.h>

int main(void)

{

int value[10] = { 0, };

int count = 0;

printf("5개 동간에서 우측으로 붙여쓰기\n");

while (count <10) // 우측 붙여 쓰기

{

value[count] = (count + 1) * 10;

printf("[%5d]\n", value[count]);// %와 d사이의 값은 얼마만큼 공간중에서를 의미합니다.

++count;

}

printf("5개 동간에서 좌측으로 붙여쓰기\n");

count = 0;

while (count < 10)

{

printf("[%-5d]\n", value[count]);// - 값은 좌측 부터를 의미한다.

++count;

}


return 0;

}



결과 : 



#printf, #c언어, #c언어입문, #프로그램입문,  #printf오른쪽붙여쓰기, #printf왼쪽붙여쓰기

'Programing - C > C Basic grammar ' 카테고리의 다른 글

056 puts  (0) 2017.07.27
055 gets, gets_s  (0) 2017.07.27
053 scanf, scanf_s  (0) 2017.07.27
052 putch, _putch  (0) 2017.07.27
051 getch 함수  (0) 2017.07.27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 


1. printf 와 양대산맥으로 자주 쓰입니다.


2. 스티림 버퍼에서 자료를 읽어와 변수에 저장하는 함수입니다.


3. printf와 사용은 같지만 변수값에 &(엔퍼센트) 주소 값이 들어갑니다.


4. visual studio 2010 부터는 scanf 를 사용하시면 경고나 에러가 나옵니다 따라서 scanf_s를 사용을 권장합니다.




목표 : 


scanf 를 활용하여 2수를 입력 받고 



기타 : 

scanf_s 는 조금 특이하게 자료형을 받는 변수 뒷부분에 , 해주고 자료형의 크기를 써줘야합니다.

example

int value = 0;


사용 예시 1: scanf_s("%d", &value,sizeof(value)); 

사용 예시 2: scanf_s("%d", &value); 



소스코드 : main.c

#include <stdio.h>


#define MAX 2


int main(void)

{

int value[MAX] = { 0, };

int count = 0;


while (count < MAX)

{

printf("정수 입력후 ENTER :");


// scanf를 사용하면 error C4996가 발생합니다.

scanf_s("%d", &value[count], sizeof(int));


++count;

}


//scanf_s("%d %d", &value[0], &value[1]); //이렇게 사용해도 됩니다^^


printf(" value[0] : %d\n vlaue[1] : %d\n 두합의 결과 : %d \n", value[0], value[1], value[0] + value[1]);


return 0;

}


결과 : 


#c언어, #c언어입문, #프로그램입문, #scanf, #scanf_s, #errorc4996

'Programing - C > C Basic grammar ' 카테고리의 다른 글

055 gets, gets_s  (0) 2017.07.27
054 printf를 이용하자  (0) 2017.07.27
052 putch, _putch  (0) 2017.07.27
051 getch 함수  (0) 2017.07.27
050 매크로 함수 이해하기  (0) 2017.07.27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 

1. conio.h 에 포함 되어 있다.

2. 아스키 코드값을 받아 콘솔 화면에 출력한다.


중요!!!

visual studio 2010 이상 쓰시는 분은 그냥 putch 이나 getch 쓰시면 에러가 나거나 경고 메시지가 나옵니다. 그럴때는 당황하지 말고 앞에 _(언더바)  하나 붙여주세요^^



원형 


void putch( int _Ch );

void _putch( int _Ch );



소스 코드 : main.c


#include <stdio.h>

#include <conio.h>


#define ESC 27 //종료 값


#define  W  'W'

#define  w   'w'


#define  S 'S'

#define  s 's'



#define  A 'A'

#define  a 'a'



#define  D 'D'

#define  d 'd'


#define TRUE 1

#define FALSE 0


int FrameMove(void);

void Print(int nKey);


int g_nKey = 0; // 전역 키값


int main(void)

{


//do

//{

// printf("입력 대기\n");

//}while(FrameMove());

while (FrameMove())

{

Print(g_nKey);

}


printf("GAME OVER");

return 0;

}


int FrameMove(void)

{

int nReturnValue = TRUE;


g_nKey = _getch();


if (g_nKey == ESC)

{

nReturnValue = FALSE;

}



return nReturnValue;


}


//_CRT_SECURE_NO_WARNINGS

//error C4996 


void Print(int nKey)

{

switch (nKey)

{

case W:

case w:

_putch('\t');

_putch(W);

_putch('\n');

break;


case S:

case s:

_putch('\t');

_putch(S);

_putch('\n');

break;

case A:

case a:

_putch('\t');

_putch(A);

_putch('\n');

break;

case D:

case d:

_putch('\t');

_putch(D);

_putch('\n');

break;


default:

_putch('\t');

_putch('X');

_putch('\n');

break;

}

}


결과


#c언어, #C언어입문, #프로그램입문, #게임프로그램, #putch, #_putch

'Programing - C > C Basic grammar ' 카테고리의 다른 글

054 printf를 이용하자  (0) 2017.07.27
053 scanf, scanf_s  (0) 2017.07.27
051 getch 함수  (0) 2017.07.27
050 매크로 함수 이해하기  (0) 2017.07.27
049 선언과 헤더파일 만들기  (0) 2017.07.27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

개념 : 

1. 문자 하나를 받는 함수입니다.

2. conio.h 에 포함되어 있습니다.


목표 : 

getch 함수를 이용해서 간단한 게임을 만들어 보자


소스코드 : main.c

#include <stdio.h>

#include <conio.h>


#define ESC 27 //종료 값


#define  W  'W'

#define  w   'w'


#define  S 'S'

#define  s 's'



#define  A 'A'

#define  a 'a'



#define  D 'D'

#define  d 'd'


#define TRUE 1

#define FALSE 0


int FrameMove(void);



int g_nKey = 0; // 전역 키값


int main(void)

{

do

{

printf("입력 대기\n");

} while (FrameMove());



printf("GAME OVER");

return 0;

}


int FrameMove(void)

{

int nReturnValue = TRUE;

g_nKey = getch();

switch (g_nKey)

{

case W:

case w:

printf("위로 이동\n");

break;


case S:

case s:

printf("아래로 이동\n");

break;

case A:

case a:

printf("좌로 이동\n");

break;

case D:

case d:

printf("우로 이동\n");

break;

case ESC:

printf("게임 종료키 입력받음\n");

nReturnValue = FALSE;

break;

default:

printf("Key Error\n");

break;

}


return nReturnValue;

}



결과 : 


#c언어, #c언어입문, #프로그램입문, #key입력, #getch, #getch함수


'Programing - C > C Basic grammar ' 카테고리의 다른 글

053 scanf, scanf_s  (0) 2017.07.27
052 putch, _putch  (0) 2017.07.27
050 매크로 함수 이해하기  (0) 2017.07.27
049 선언과 헤더파일 만들기  (0) 2017.07.27
048 변수의 유효 범위  (0) 2017.07.27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

목표 : 

#define 을 이용해서 매크로 함수를 만들어 본다


소스코드 : main.c

#include <stdio.h>


#define SUM(A, B) A+B

#define COMPARE(A, B) A>B? A:B 


int main(void)

{

int value_1 = 2;

int value_2 = 3;


int sum = SUM(value_1, value_2);

int compare = COMPARE(value_1, value_2);


printf("value_1 과  value_2의 합은 %d \n", sum);


if (compare == value_1)

{

printf("value_1 이 value_2 보다 크다\n");

}

else if (compare == value_2)

{

printf("value_2 가 value_1 보다 크다\n");

}


return 0;

}



결과




#c언어, #c언어입문, #프로그램입문, #매크로함수

'Programing - C > C Basic grammar ' 카테고리의 다른 글

052 putch, _putch  (0) 2017.07.27
051 getch 함수  (0) 2017.07.27
049 선언과 헤더파일 만들기  (0) 2017.07.27
048 변수의 유효 범위  (0) 2017.07.27
047 함수와 파라메터  (0) 2017.07.27

+ Recent posts