AI(Artificial intelligence)/C,C++ Language

# 2. C언어 자주 쓰는 함수

prden 2023. 1. 10. 20:24

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

 

[C언어/C++] strcpy, strncpy 함수(문자열 복사)에 대해서

안녕하세요. BlockDMask 입니다. 오늘은 C 스타일의 문자열인 char*, char[] 타입의 문자열을 복사하는 함수 두가지에 대해서 알아 볼 것 입니다. 두 함수는 바로 strcpy, strncpy 입니다. 이 두함수가 무슨

blockdmask.tistory.com

 

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 

 

c언어 - sizeof의 개념

  메모리 공간에서 소모하는 메모리의 크기를 바이트 단위로 계산해서 반환하는 sizeof라는 연산자가 ...

blog.naver.com

 

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;
}

https://modoocode.com/66

 

C 언어 레퍼런스 - sprintf 함수

 

modoocode.com

 

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://modoocode.com/104

 

C 언어 레퍼런스 - memset 함수

 

modoocode.com

https://daintystory.tistory.com/151

 

%0.0f 자리수 표현

%6.2f의 의미 6:범위 .2:소수뒷자리수 총 자리수 6자리에 소수점 2자리까지 나타내라 이 같은 경우 띄어쓰기, 값1, 값2, ., 소수1, 소수2 이렇게 6자리이다. 하지만 %3.2의 경우도 값은 제대로 나온다.

daintystory.tistory.com

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