C言語の文字列関数の定義方法は何ですか?

「C言語では、文字列関数は次の2つの方法で定義できます。」

  1. パラメータと戻り値として文字配列を使用します。
#include <stdio.h>

// 字符串长度
int my_strlen(char str[]) {
    int len = 0;
    while (str[len] != '\0') {
        len++;
    }
    return len;
}

// 字符串复制
void my_strcpy(char dest[], char src[]) {
    int i = 0;
    while (src[i] != '\0') {
        dest[i] = src[i];
        i++;
    }
    dest[i] = '\0';
}

// 字符串连接
void my_strcat(char dest[], char src[]) {
    int dest_len = my_strlen(dest);
    int i, j = 0;
    for (i = dest_len; src[j] != '\0'; i++, j++) {
        dest[i] = src[j];
    }
    dest[i] = '\0';
}

int main() {
    char str1[100] = "Hello";
    char str2[100] = "World";

    printf("str1 length: %d\n", my_strlen(str1));
    
    my_strcpy(str1, str2);
    printf("str1 after copy: %s\n", str1);
    
    my_strcat(str1, str2);
    printf("str1 after concatenation: %s\n", str1);

    return 0;
}
  1. ポインタを引数として使い、戻り値としても使用する。
#include <stdio.h>

// 字符串长度
int my_strlen(char *str) {
    int len = 0;
    while (*str != '\0') {
        len++;
        str++;
    }
    return len;
}

// 字符串复制
char* my_strcpy(char *dest, char *src) {
    char *p = dest;
    while (*src != '\0') {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = '\0';
    return p;
}

// 字符串连接
char* my_strcat(char *dest, char *src) {
    char *p = dest;
    while(*dest != '\0') {
        dest++;
    }
    while (*src != '\0') {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = '\0';
    return p;
}

int main() {
    char str1[100] = "Hello";
    char str2[100] = "World";

    printf("str1 length: %d\n", my_strlen(str1));
    
    my_strcpy(str1, str2);
    printf("str1 after copy: %s\n", str1);
    
    my_strcat(str1, str2);
    printf("str1 after concatenation: %s\n", str1);

    return 0;
}

文字配列を使ってもポインターを使っても、同じ機能を実現することができます。ただし、ポインターを使用する際には慎重に行動し、文字列の範囲外でのポインター操作を避ける必要があります。

bannerAds