1. strcpy, strncpy 함수
1) strcpy 함수
헤더파일 : <string.h>
함수원형 : char* strcpy(char* dest, const char* origin);
함수의 이름은 str(=string), cpy(=copy) 문자열을 복사하는 함수이다.
: origin에 있는 문자열 전체를 dest로 복사하는 함수이다.
ex)
char origin[] = 'HelloMonster";
char dest[100];
strcpy(dest, origin);
2) strncpy 함수
헤더파일 : <string.h>
함수원형 : char* strncpy(char* dest, const char* origin, size_t n);
str과 cpy 사이에 n은 number를 뜻한다.
따라서 str(=string), n(=number), cpy(=copy)를 뜻한다.
:origins에 있는 문자열을 dest로 복사하는데, n만큼만 복사하는 함수이다.
ex)
char origin[] = "HelloMonster";
char dest[100];
strncpy(dest, origin, sizeof(origin));
https://blockdmask.tistory.com/348
2. sizeof 함수
메모리 공간에서 소모하는 메모리의 크기를 바이트 단위로 계산해서 반환하는 연산자
이 연산자의 피 연산자로는 변수, 상수, 자료형의 이름 3가지 다 가능하다.
#include <studio.h>
int main(void)
{
char ch = 9;
int inum = 1052;
double dnum = 2.1234;
printf("변수 ch의 크기: %n", sizeof(ch)); // 변수 ch의 크기: 1
printf("변수 inum 크기: %n", sizeof(inum)); // 변수 inum의 크기: 4
printf("변수 dnum 크기: %n", sizeof(dnum)); // 변수 dnum의 크기: 8
printf("\n");
printf("char의 크기: %n", sizeof(char)); //char의 크기: 1
printf("int의 크기: %n", sizeof(int)); //int의 크기: 4
printf("long의 크기: %n", sizeof(long)); //long의 크기: 4
printf("long long의 크기: %n", sizeof(long long));//long long의 크기: 8
printf("float의 크기: %n", sizeof(float)); //float의 크기: 4
printf("double의 크기: %n", sizeof(double)); //double의 크기: 8
return 0;
}
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jsky10503&logNo=220584768026
3. sprintf
#include <stdio.h> // C++ 에서는 <cstdio>
int sprintf(char* str, const char* format, ...);
str에 데이터를 형식에 맞춰서 작성, str가 가리키는 배열에 형식 문자열에 지정한 방식대로 C 문자열을 쓴다.
쉽게 printf에서 화면에 출력하는 대신에 화면에 출력할 문자열을 인자로 지정한 문자열에 쓴다는 것이다.
이때 인자로 지정한 배열의 크기는 배열에 쓰여질 문자열의 크기보다 커야한다.
* 주의 : sprintf함수는 자동적으로str 맨 마지막에 NULL문자를 붙이기 때문에 항상 한 칸의 여유가 있어야 한다.
1) str : char 배열을 가리키는 포인 c 문자열이 저장될 char 배열을 가리키는 포인터
2) format : 위 str에 쓰여질 문자열을 포함하는 형식 문자열로, 이는 형식 태그를 포함할 수 있다. 이때, 형식 태그는 부수적인자로 지정한 데이터와 치환되어 쓰여지게 된다. 이 때 데이터가 치환되는 방식은 형식 태그에 의해 좌우된다.
#include <stdio.h>
int main() {
int integer = 123;
char character = 'c';
char string[] = "hello, world";
int* pointer = &integer;
double pi = 3.141592;
char buf[100];
sprintf(buf, "integer : (decimal) %d (octal) %o \n", integer, integer);
printf("%s \n", buf); // integer : (decimal) 123 (octal) 173
sprintf(buf, "character : %c \n", character);
printf("%s \n", buf); // character : c
sprintf(buf, "string : %s \n", string);
printf("%s \n", buf); // string : hello, world
sprintf(buf, "pointer addr : %p \n", pointer);
printf("%s \n", buf); // pointer addr : 0024FEE8
sprintf(buf, "floating point : %e // %f \n", pi, pi);
printf("%s \n", buf); // floating point : 3.141592e+000
sprintf(buf, "percent symbol : %% \n");
printf("%s \n", buf); // percent symbol : x
return 0;
}
4. memset
보통 생성된 배열을 초기화할 때 사용하며, memset 함수는 메모리의 내용을 원하는 크기만큼 특정값으로 설정할 수 있다.
헤더 : <string.h>
#include <string.h> // C++ 에서는 <cstring>
void* memset(void* ptr, int value, size_t num);
- ptr : 값을 채울 매모리의 시작주소
- value : 채울 값, 인자로는 int로 전달되지만 함수 내부적으로는 unsigned char로 형변환 되어서 사용된다.
- num : value로 채울 바이트 수
* ptr이 리턴된다. 실패시 null 리턴
- 사용법 : memset(포인터(배열의 시작주소). 설정할 값, 크기);
- 포인터 : 배열의 시작주소를 넣는다.
- 설정할 값 : memset 함수는 1바이트 단위로 초기화하기 때문에 int 형의 수를 넣을 때 0 이외의 수는 제대로 표현되지 않느다. 즉 int 배열은 0으로 초기화할 때만 사용해야 한다. char형의 경우 어떤 문자를 넣어도 상관 없다.
- 크기 : sizeof(자료형)* 배열의 크기 혹은 sizeof(배열명)으로 작성가능하다.
#include <iostream>
#include <string.h>
using namespace std;
int main() {
int intarr[10];
char chararr[10];
// 크기를 sizeof(자료형)*배열크기로 설정
memset(intarr, 0, sizeof(int) * 10);
for (int i = 0; i < 10; i++)
cout << intarr[i] << " ";
cout << endl;
// 크기를 sizeof(배열명)으로 설정
memset(intarr, 0, sizeof(intarr));
for (int i = 0; i < 10; i++)
cout << intarr[i] << " ";
cout << endl;
// int 배열에서 0이 아닌 수로 초기화 했을 때
memset(intarr, 1, sizeof(intarr));
for (int i = 0; i < 10; i++)
cout << intarr[i] << " ";
cout << endl;
// char 배열 'a'로 초기화
memset(chararr, 'a', sizeof(chararr));
for (int i = 0; i < 10; i++)
cout << chararr[i] << " ";
cout << endl;
}
https://daintystory.tistory.com/151
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=hummer98&logNo=10069070893
'AI(Artificial intelligence) > C,C++ Language' 카테고리의 다른 글
#if vs. #ifdef (0) | 2023.01.11 |
---|---|
#1. C 언어 포인터 (0) | 2023.01.10 |
#0. C언어 변수 선언 및 자료형 (0) | 2023.01.10 |
C 프로그램 실행과정 (0) | 2023.01.08 |