C 언어 문자 함수,메모리 함수 기능 및 구현 코드

C 언어 문자 함수,메모리 함수 기능 및 구현 strlen 함수(문자열 길이 구하 기)주의 점 시 뮬 레이 션 구현 strcpy 함수(문자열 복사 함수)주의 점 시 뮬 레이 션 구현 strcat 함수(문자열 연결 함수)주의 점 시 뮬 레이 션 구현 strcmp 함수 주의 점 시 뮬 레이 션 구현 strstrstr 함수 시 뮬 레이 션 구현 strtok 함수 사용 strerror 함수 사용 memcpy 함수 주의 점 시 뮬 레이 션 구현 memmove함수 주의 점 시 뮬 레이 션 구현 memset 함수 주의 점
strlen 함수(문자열 길이 구하 기)
문자열 길 이 를\0 까지 통계 합 니 다.
주의 점
1.라 이브 러 리 에 속 합 니 다.
2.매개 변 수 는 문자열 이 고 반환 유형 은 기호 가 없 는 정형 입 니 다.특히 다음 그림 에 주의 하 십시오.
이 그림 의 운행 결 과 는>입 니 다.기호 가 없 는 정형 가감 은 반드시 0 보다 많은 숫자 이기 때문에 이런 비 교 는 피해 야 합 니 다.
3、종료 표 지 는\0
在这里插入图片描述
시 뮬 레이 션 실현

int my_strlen(const char *str){
  assert(str);
  if(*str=='\0'){
    return 0;
  }
  return 1 + my_strlen(str + 1);//      
}
strcpy 함수(문자열 복사 함수)
sorc 배열 의 첫 번 째\0 전(\0 포함)의 모든 내용 을 dest 배열 로 복사 합 니 다.
주의 점
1.dest 배열 은 source 배열 을 충분히 수용 해 야 합 니 다.
2.source 배열 은 반드시\0 을 중지 표지 로 해 야 합 니 다.
3.dest 배열 을 변경 할 수 있 습 니 다.
4、\0 은 복 사 됩 니 다
시 뮬 레이 션 실현

char *my_strcpy(char *dest,const char *sorc)
{
  assert(dest && sorc);
  char *ret = dest;
  while (*dest++ = *sorc++)// /0        ,    
  {
    ;
  }
  return ret;
}
strcat 함수(문자열 연결 함수)
dest 배열 의 첫 번 째\0 부터 sorc 함수 의 첫 번 째\0 전의 모든 내용 을 복사 합 니 다.dest 함수 의 첫 번 째\0 은 덮어 쓰 고 sorc 함수 의\0 은 복사 합 니 다.
주의 점
1.dest 배열 은 자신 과 source 배열 을 충분히 수용 해 야 합 니 다.
2.dest 배열 은 공간 을 수정 해 야 합 니 다.
3.dest,source 배열 은 모두\0 이 있 습 니 다.
4.중단 조건 이 없 기 때문에 스스로 복사 할 수 없습니다.
시 뮬 레이 션 실현

char *my_strcat(char *dest, const char *sorc)
{
  char *ret = dest;
  while (*dest != '\0')
  {
    dest++;
  }
  while (*dest++ = *sorc++)
  {
    ;
  }
  return ret;
}
strcmp 함수
두 문자열 을 비교 하고 한 자리 씩 비교 합 니 다.대응 하 는 위치 가 다 르 면 ASCII 코드 가 줄 어 든 값 을 되 돌려 줍 니 다.각각 같 으 면(즉 전체 문자열 이 같 음)0 을 되 돌려 줍 니 다.
주의 점
1.길이 가 아 닌 해당 위치의 ASCII 코드 값 비교
시 뮬 레이 션 실현

int my_strcmp(const char *str1, const char *str2)
{
  assert(str1 && str2);
  while (*str1 == *str2)
  {
    if (*str1 == '\0' && *str2 == '\0')
    {
      return 0;
    }
    str1++;
    str2++;
  }
  return *str1 - *str2;
}
strstr 함수
모 문자열 에서 하위 문자열 을 찾 으 면 모 문자열 의 첫 주 소 를 되 돌려 주 고 찾 지 않 으 면 빈 지침 을 되 돌려 줍 니 다.
시 뮬 레이 션 실현
여기 서 폭력 적 인 방법 으로 해답 을 구하 면 KMP 알고리즘 이 더 좋 은 해답 을 제공 합 니 다.

char *my_strstr(char *mum, char *child)
{
  assert(mum && child);
  const char *pc = mum;
  while (*pc)
  {
    const char *p1 = pc;
    const char *p2 = child;
    while (*p1 == *p2 && *p1 && *p2)
    {
      p1++;
      p2++;
    }
    if (*p2 == '\0')
    {
      return (char *)pc;
    }
    pc++;
  }
  return NULL;
}
strtok 함수
1.두 개의 인자(arr 소스 문자열,sep 기호 문자열(절단 표지))
2.두 번 째 문자열 을 얻 으 려 면 빈 포인터 가 필요 합 니 다.
在这里插入图片描述
쓰다

int main()
{
  char arr[]="skyline&csdn.com";
  char arr2[30]={0};//  strtok        ,       
  char sep[]="&.";
  strcpy(arr2,arr);
  printf("%s
",strtok(arr2,sep)); printf("%s
",strtok(NULL,sep)); printf("%s
",strtok(NULL,sep)); return 0; }
결과:
在这里插入图片描述
strerror 함수
다른 오류 경보 생 성
在这里插入图片描述
쓰다

int main()
{
  prinf("%s
",strerror(errno));// }
memcpy 함수
한 바이트,한 바이트 의 복사,모두 count 바이트 복사;
주의 점
1.이 함 수 는 서로 관련 이 없 는 두 개의 메모리 블록(같 으 면 알고리즘 제한 으로 인해 불가능)을 사용 해 야 합 니 다.예 를 들 어

int main()
{
  int num1[6] = {1, 2, 3, 4, 5, 6};
  my_memcpy(num1+2, num1, 16);//    121234
                //    121212
  for (int i = 0; i < 6;i++){
    printf("%d", num1[i]);
  }
  return 0;
}
시 뮬 레이 션 실현

void my_memcpy(void *dest, void *src, size_t count){
  assert(dest && src);
  while (count--)
    {
      *(((char *)dest)) = *(((char *)src));
      dest=(char*)dest+1;//      ++(char*)dest,gcc     (char*)dest      
      src=(char*)src+1;
    }
}
memmove 함수
주의 점
1.상기 에 나타 난 관련 메모 리 를 받 아들 일 수 있 습 니 다.
시 뮬 레이 션 실현

void my_memmove(void *dest, void *src, size_t count)
{
  assert(dest && src);
  if (dest > src)//          ,         
  {
    while (count--)
    {
      *(((char *)dest) + count) = *(((char *)src) + count);
    }
  }
  else
  {
    while (count--)//)//          ,         
    {
      *(((char *)dest)) = *(((char *)src));
      dest=(char*)dest+1;
      src=(char*)src+1;
    }
  }
}
memset 함수
하나의 바이트 를 하나의 값 으로 설정 하고,모두 count 바이트 를 설정 합 니 다.
주의 점
1.바이트 단위 로 설정 되 어 있 습 니 다.int num[10]={0},memset(num,1,40)은 배열 을 모두 1 로 만 들 수 없습니다.int 배열 의 한 요 소 는 4 개의 바이트 이 고 실제 적 으로 모든 요소 가 01 01 01 01 01 로 변 하기 때문에 잘못된 것 입 니 다.
C 언어 문자 함수,메모리 함수 기능 및 구현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 문자 함수,메모리 함수 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!

좋은 웹페이지 즐겨찾기