C 언어 에서 strcpy()함수 와 strncpy()함수 의 사용 을 자세히 설명 합 니 다.

3014 단어 C 언어strcpystrncpy
C 언어 strcpy()함수:문자열 복사
헤더 파일:\#include
정의 함수:

char *strcpy(char *dest, const char *src);
함수 설명:strcpy()는 매개 변수 src 문자열 을 매개 변수 dest 가 가리 키 는 주소 로 복사 합 니 다.
반환 값:매개 변수 dest 의 문자열 시작 주 소 를 되 돌려 줍 니 다.
추가 설명:인자 dest 가 가리 키 는 메모리 공간 이 크 지 않 으 면 버퍼 넘 침(buffer Overflow)의 오류 가 발생 할 수 있 습 니 다.프로그램 을 작성 할 때 특히 주의 하거나 strncpy()로 대체 하 십시오.
범례

#include <string.h>
main(){
 char a[30] = "string(1)";
 char b[] = "string(2)";
 printf("before strcpy() :%s
", a); printf("after strcpy() :%s
", strcpy(a, b)); }
실행 결과:

before strcpy() :string(1)
after strcpy() :string(2)
C 언어 strncpy()함수:문자열 을 복사 하기 전 n 글자
헤더 파일:\#include
strncpy()는 문자열 의 앞 n 자 를 복사 하 는 데 사 용 됩 니 다.원형 은 다음 과 같 습 니 다.
 

 char * strncpy(char *dest, const char *src, size_t n);
[매개 변수 설명]dest 는 대상 문자열 지침 이 고 src 는 원본 문자열 지침 입 니 다.
strncpy()는 문자열 src 앞 n 자 를 문자열 dest 에 복사 합 니 다.
strcpy()와 달리 strncpy()는 dest 에'\0'표 시 를 추가 하지 않 습 니 다.이 는 상식 에 맞지 않 는 많은 문 제 를 일 으 켰 습 니 다.아래 의 예제 에서 설명 하 겠 습 니 다.
메모:src 와 dest 가 가리 키 는 메모리 영역 은 겹 칠 수 없 으 며,dest 는 n 개의 문 자 를 배치 할 충분 한 공간 이 있어 야 합 니 다.
[반환 값]문자열 dest 를 되 돌려 줍 니 다.
[함수 예시]4 개의 문자열 을 복사 합 니 다.

#include<stdio.h>
#include<string.h>
int main(void){
 char dest1[20];
 char src1[] = "abc";
 int n1 = 3;
 char dest2[20]="********************";
 char src2[] = "abcxyz";
 int n2 = strlen(src2)+1;
 char dest3[100] = "http://see.xidian.edu.cn/cpp/shell/";
 char src3[6] = "abcxyz"; //   '\0'
 int n3 = 20;
 char dest4[100] = "http://see.xidian.edu.cn/cpp/u/yuanma/";
 char src4[] = "abc\0defghigk";
 int n4 = strlen(src3);
 strncpy(dest1, src1, n1); // n1  strlen(str1)+1,    '\0'
 strncpy(dest2, src2, n2); // n2  strlen(str2)+1,     src2   '\0'   dest2
 strncpy(dest3, src3, n3); // n3  strlen(str3)+1,    str3
 strncpy(dest4, src4, n4); // src4    '\0'
 printf("dest1=%s
", dest1); printf("dest2=%s, dest2[15]=%c
", dest2, dest2[10]); printf("dest3=%s
", dest3); printf("dest4=%s, dest4[6]=%d, dest4[20]=%d, dest4[90]=%d
", dest4, dest4[6], dest4[20], dest4[90]); return 0; }
VC 6.0 실행 결과:

MinGW 실행 결과:

위의 운행 결 과 를 통 해 알 수 있 듯 이 strncpy()는 통제 하기 어렵 고 행동 이 기괴 하 다.strncpy()를 사용 하 는 가장 안전 한 방법 은 n 을 strlen(src)+1,즉 전체 문자열 을 복사 하 는 동시에'\0'을 dest 에 추가 하 는 것 입 니 다.그러나 이 는 strcmp()의 역할 과 별 반 다 르 지 않다.

좋은 웹페이지 즐겨찾기