◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!
#include#include #include using namespace std; void my_strcpy_s(char* dest, int countofdest, char* src) { int srclength = strlen(src); assert(countofdest > srclength && "buffer is too small."); for(int i=0; i < srclength+1; i++) { dest[i] = src[i]; } } void my_strncpy_s(char* dest, int countofdest, char* src, int copylength) { assert(countofdest > copylength); for(int i=0; i < copylength; i++) { dest[i] = src[i]; } dest[copylength] = '\0'; } void my_strcat_s(char* dest, int countofdest, char* src) { int destlength = strlen(dest); int srclength = strlen(src); assert(countofdest > destlength+srclength); for(int i=0; i < srclength+1; i++) { dest[destlength+i] = src[i]; } } void my_strncat_s(char* dest, int countofdest, char* src, int copylength) { int destlength = strlen(dest); assert(countofdest > destlength+copylength); for(int i=0; i < copylength; i++) { dest[destlength+i] = src[i]; } dest[destlength+copylength] = '\0'; } int my_strcmp(char* left, char* right) { if(strlen(left) != strlen(right)) return -1; int length = strlen(left); int compare = 0; for(int i=0; i < length; i++) { compare = left[i] - right[i]; if(compare != 0) break; } return compare; } void my_sprintf_s(char* buffer, int countofbuffer, char * format, ...) { // 가변인자로부터 문자열 얻기. va_list args; // 시작. va_start( args, format ); // 문자열을 buffer에 입력한다. vsprintf_s( buffer, countofbuffer, format, args ); // 끝. va_end( args ); } int add_number (int start, ... ) { va_list ap; // 가변인자 시작위치 설정하고 인수 목록을 초기화한다. va_start (ap, start); //for (i = 0; i < count; i++) // sum += va_arg (ap, int); while(true) { // 다음 인수값을 얻어온다. int num = va_arg (ap, int); if (num == -1) break; start += num; } // 정리한다. va_end (ap); return start; } int main( ) { char src[] = "MBC 아카데미 디지털 교육원"; char dest[128]; // 문자열 복사. my_strcpy_s(dest, _countof(dest), src); // 버퍼가 작을 경우, 런타임 에러 발생. cout << dest << endl; // 문자열의 일부만 복사. strncpy_s(dest, _countof(dest), src, 12); // 12글자만 복사.(시작주소를 변경하여 원하는 글자를 복사할 수 있다.) //strncpy_s(dest, _countof(dest), src+4, 8); // "아카데미" cout << dest << endl; char str1[128] = "MBC 아카데미 "; char str2[] = "디지털 교육원"; // 문자열 합성. strcat_s(str1, _countof(str1), str2); cout << str1 << endl; // 문자열의 일부만 합성. strncat_s(str1, _countof(str1), str2, 6); // 한글 1글자를 2글자로 해석한다. cout << str1 << endl; // 문자열 비교. int ret = strcmp(src, str1); if(ret == 0) cout << "같은 문자열." << endl; else cout << "다른 문자열." << endl; // 문자열 포맷 생성. char gugu[] = "구구단"; int dan = 5, row = 2; sprintf_s(dest, _countof(dest), "%s : %d x %d = %d", gugu, dan, row, dan*row); cout << dest << endl; // 이 호출은 16을 출력한다. cout << add_number (5, 5, 6, -1) << endl; // 이 호출은 55를 출력한다. cout << add_number (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1) << endl; return 0; }