null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
⌂
C언어 실전 코드 패턴
Structure
struct
•
구조체 배열 선언과 초기화
•
구조체 포인터 접근하는 법
•
Swap 함수를 구조체에 적용하기
•
연결리스트 삽입·삭제·정렬
memory-pointer
•
malloc·free 사용 패턴
•
포인터로 Swap 구현하기
•
배열 복사 — memcpy vs 루프 비교
string-impl
•
strlen을 직접 짜면
•
strcpy를 직접 짜면
•
strcat·strcmp 구현과 안전한 대안
const-module
•
const 올바른 사용법
•
.h 파일과 .c 파일 역할 구분
•
파일 입출력 패턴
practical-tricks
•
가변길이 배열 파라미터 처리
•
!! 이중 부정 연산자
•
Windows 소켓 에러 모음
•
미니 프로젝트 — 영타 연습기 만들기
Flow Structure
strlen을 직접 짜면
9 / 17
strcat·strcmp 구현과 안전한 대안
☆ Star
↗ Full
strcpy를 직접 짜면
#c
#string
#strcpy
#buffer-overflow
#embedded
@devpc
|
2026-05-04 12:40:00
|
GET /api/v1/flows/25/nodes/449?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# strcpy를 직접 짜면 ## 표준 strcpy ```c char dst[32]; strcpy(dst, "Hello"); /* dst에 "Hello\0" 복사 */ ``` src의 `\0`까지 포함해서 dst로 복사한다. --- ## 직접 구현 ```c char *my_strcpy(char *dst, const char *src) { char *ret = dst; /* 원본 dst 주소 보존 */ while ((*dst++ = *src++) != '\0'); return ret; } ``` `(*dst++ = *src++) != '\0'`는 세 가지를 한 번에 한다: 1. `*src` 값을 `*dst`에 대입 2. 두 포인터를 각각 1 증가 3. 대입한 값이 `\0`이면 루프 종료 관용적인 C 코드다. 처음에는 낯설지만 익숙해져야 한다. --- ## strcpy의 치명적 문제 ```c char small[5]; strcpy(small, "Hello World"); /* 버퍼 오버플로 */ ``` `small`은 5바이트인데 11자 + `\0` = 12바이트를 쓰려 한다. **스택 오버플로, 인접 변수 덮어쓰기, 보안 취약점**의 원인이 된다. --- ## strncpy: 길이 제한 버전 ```c strncpy(dst, src, sizeof(dst) - 1); dst[sizeof(dst) - 1] = '\0'; /* 널 종료 보장 */ ``` `strncpy`는 n바이트까지만 복사하지만 `\0`을 자동으로 추가하지 않는 경우가 있어서 **마지막에 수동으로 `\0`을 넣어야 한다.** --- ## 더 안전한 직접 구현 ```c size_t safe_strcpy(char *dst, const char *src, size_t dst_size) { if (!dst || !src || dst_size == 0) return 0; size_t i = 0; while (i < dst_size - 1 && src[i] != '\0') { dst[i] = src[i]; i++; } dst[i] = '\0'; /* 반드시 널 종료 */ return i; /* 실제 복사된 문자 수 */ } ``` - dst_size를 반드시 받는다 - 항상 `\0`으로 끝낸다 - 복사된 길이를 반환해서 잘림(truncation)을 감지할 수 있다 --- ## strlcpy: BSD/macOS 표준 ```c /* POSIX 비표준이지만 널리 쓰임 */ strlcpy(dst, src, sizeof(dst)); ``` `strlcpy`는 항상 `\0`으로 끝내고 원본 src 길이를 반환한다. 반환값 > sizeof(dst)-1이면 잘린 것이다. --- ## 임베디드에서의 권장 사항 | 함수 | 평가 | |------|------| | `strcpy` | 사용 금지 | | `strncpy` | 주의 필요 (널 종료 수동) | | `strlcpy` | 권장 (없으면 직접 구현) | | `snprintf` | 가장 범용적 — 형식 지정 복사에 사용 | 임베디드 보안 코딩 가이드라인(MISRA C, CERT C)에서는 `strcpy` 사용을 명시적으로 금지한다.
strlen을 직접 짜면
strcat·strcmp 구현과 안전한 대안
// COMMENTS
Newest First
ON THIS PAGE
No content selected.