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
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

목표 :

헤더 파일을 만들어본다.

만들어 본 헤더파일 위치와 사용해서 프로그램을 작성해본다.


소스코드 : MyHeader.h , main.c


MyHeader.h만들기

1. 프로젝트 >우클릭 > 새항목 추가



2. 헤더파일 선택후 이름 정하고 확인



3. 파일 확인



탐색 창이 열리고 같은 프로젝트내에 파일을 생성된것으 확인할수 있어요^^





4.소스코드 : main.c

#include "MyHeader.h"


int main(void)

{//hello world

char string[BUF_MAX] = { 'H','e','l','l','o',' ','w','o','r','l','d','\n' };


printf("%s", string);

}


결과

 



#c언어, #C언어입문, #프로그램입문, #헤더파일추가

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

051 getch 함수  (0) 2017.07.27
050 매크로 함수 이해하기  (0) 2017.07.27
048 변수의 유효 범위  (0) 2017.07.27
047 함수와 파라메터  (0) 2017.07.27
046 자료형 재정의( typedef )  (0) 2017.07.27

+ Recent posts