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

061 strncmp, _strnicpm


개념 : 


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


2. strcmp, _stricmp 와 같은점은 문자열검사를 하는것이고 다른것이 앞에서부터 몇바이트를 검사할것인지를 지정해준다.



목표: 


명령인지를 체크하고 그명령문이라면 프로그램이 멈추는 기능을 구현해보자.




소스코드 : main.c

#include <stdio.h>

#include <string.h>


#define TRUE 1

#define FALSE 0

#define MAX 256


int main(void)

{

char *pString = "Cmd";

char szBuffer[MAX] = { 0, };

int nMatchByte = strlen(pString);

int nMatch = 0;


while (TRUE)

{

printf("input : ");

gets_s(szBuffer, sizeof(szBuffer));

nMatch = strncmp(pString, szBuffer, nMatchByte);


if (nMatch == 0)

{

puts("Matched Cmd");

break;

}

else

{

printf("%d ", nMatch);

puts("error code");

}

}


puts("Checked CMD");

puts(szBuffer);


memset(szBuffer, '\0', sizeof(szBuffer));// 버퍼 공간을 초기화해준다.


while (TRUE)

{

printf("input : ");

gets_s(szBuffer, sizeof(szBuffer));

nMatch = _strnicmp(pString, szBuffer, nMatchByte);


if (nMatch == 0)

{

puts("Matched Cmd");

break;

}

else

{

printf("%d ", nMatch);

puts("error code");

}

}


puts("Checked CMD");

puts(szBuffer);




return 0;

}



결과


#strncmp, #_strnicmp




062 strcat, strncat, strcat_s, strncat_s


개념 : 


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


2. 비쥬얼 스튜디오 2010 이상 버전 부터는 _s를 붙여서 사용한다.


3. 첫번째 문자열에 두번째 문자열값을 복사 해주는데 첫번째 문자열 끝부분을 연결하여 붙여준다.



목표 : 


입력한 문자들을 메모리에 저장하고 exit 라고 입력하기전까지 기록한다.



소스코드 : main.c

#include <stdio.h>

#include <string.h>


#define TRUE 1

#define FALSE 0


#define BUFFER_MAX 1024

#define TEMP_MAX 256

#define MAX_CHARACTERS 5


int main(void)

{

char szDest[BUFFER_MAX] = { 0, };

char szTemp[TEMP_MAX] = { 0, };


int nCount = 0;

puts("strcat_s");

while (TRUE)

{

printf("input (progream stop exit): ");

gets_s(szTemp, sizeof(szTemp));


if (_stricmp("exit", szTemp) == 0)

{

puts("exit, storp program");

break;

}

else

{

nCount += strlen(szTemp);


if (nCount >= sizeof(char) * BUFFER_MAX)

{

puts("memory full, stop program");

break;

}

else

{

strcat_s(szDest, sizeof(szDest), szTemp);

strcat_s(szDest, sizeof(szDest), "\n");//개행을 넣어준다.

}


}

}


puts(szDest);


memset(szDest, 0, sizeof(szDest)); // 버퍼 초기화


nCount = 0;

puts("strncat_s");

while (TRUE)

{

printf("input (progream stop exit): ");

gets_s(szTemp, sizeof(szTemp));


if (_stricmp("exit", szTemp) == 0)

{

puts("exit, storp program");

break;

}

else

{

nCount += 5;


if (nCount >= sizeof(char) * BUFFER_MAX)

{

puts("memory full, stop program");

break;

}

else

{

strncat_s(szDest, sizeof(szDest), szTemp, MAX_CHARACTERS); // 특징은 5개만 뽑아서 연결해준다.

strcat_s(szDest, sizeof(szDest), "\n");//개행을 넣어준다.

}


}

}

puts(szDest);

return 0;

}




결과




#c언어, #c언어입문, #프로그램입문, #strcat, #strncar, #strcat_s, #strncat_s

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

064 strstr  (0) 2017.07.28
063 strlen 사용및 구현  (0) 2017.07.28
060 strcmp, _stricmp 구현해보자  (0) 2017.07.27
059 strcmp, _stricmp  (0) 2017.07.27
058 strcpy 구현해보기  (0) 2017.07.27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

목표 : 

strcmp와 _stricmp를 구현해보자.



소스코드: main.c

#include <stdio.h>


#define TRUE 1

#define FALSE 0


#define LOW_TO_UPPER 32

#define MAX 256


int strcmp(char* pString1, char *pString2);

int _stricmp(char* pString1, char *pString2);


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;

}


int strcmp(char* pString1, char *pString2)

{

int nResultValue = 0;

int nCount = 0;


while (TRUE)

{

if (pString1[nCount] == pString2[nCount])

{

if (pString1[nCount] == '\0')

{

nResultValue = 0;

break;

}

}

else

{

nResultValue = pString1[nCount] >= pString2[nCount] ? 1 : -1;

break;

}


nCount++;

}


return nResultValue;

}


int _stricmp(char* pString1, char *pString2)

{

int nResultValue = 0;

int nCount = 0;

int nConvertLow1 = 0;

int nConvertLow2 = 0;

//pString2[nCount] 

//pString1[nCount] 


while (TRUE)

{

//일단 값을 카피한다.

nConvertLow1 = pString1[nCount];

nConvertLow2 = pString2[nCount];


//대문자 인지 검사해줘서 조건에 해당하면 소문자로 변환해주는 작업을해준다.

if (nConvertLow1 >= 'A' &&  nConvertLow1 <= 'Z')

{

nConvertLow1 += LOW_TO_UPPER;

}

if (nConvertLow2 >= 'A' &&  nConvertLow1 <= 'Z')

{

nConvertLow2 += LOW_TO_UPPER;

}


//변환된 대상으로 검사를 진행한다.

if (nConvertLow1 == nConvertLow2)

{

if (nConvertLow1 == '\0')

{

nResultValue = 0;

break;

}

}

else

{

nResultValue = nConvertLow1;

break;

}


nCount++;

}


return nResultValue;

}



결과


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

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

063 strlen 사용및 구현  (0) 2017.07.28
061 strncmp, _strnicpm 062 strcat, strncat, strcat_s, strncat_s  (0) 2017.07.28
059 strcmp, _stricmp  (0) 2017.07.27
058 strcpy 구현해보기  (0) 2017.07.27
057 strcpy, strcpy_s  (0) 2017.07.27
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

+ Recent posts