C风格字符串

代码中出现的字符串相关的函数或运算符有:

  • strcpy()
  • strlen()
  • strcat()
  • sizeof()
  • strcmp()

代码如下:

#include <cstring>
#include <iostream>

int main() {
    {
        // 函数 strcpy()
        // 参数为两个C风格字符串, 将第二个字符串拷贝到第一个字符串

        // 函数 strlen()
        // 参数为一个C风格字符串, 返回字符串的长度, 计算长度时不包含末尾的'\0'
        const char* strA {"nice to meet you."};
        char* strB {new char[strlen(strA) + 1]};
        strcpy(strB, strA);

        std::cout << strB << std::endl;
        
        delete strB;
        strB = nullptr;
    }

    {
        // 函数 strcat()
        // 参数为两个C风格字符串, 将第二个字符串 附加 到第一个字符串后面
        const char* strA {"nice "};
        const char* strB {"to "};
        const char* strC {"meet "};
        const char* strD {"you."};
        char* result {new char[strlen(strA) + strlen(strB) + strlen(strC) + strlen(strD) + 1]};

        strcpy(result, strA);
        strcat(result, strB);
        strcat(result, strC);
        strcat(result, strD);

        std::cout << result << std::endl;

        delete result;
        result = nullptr;
    }

    {
        // 运算符 sizeof()
        // 获取指定的数据类型或变量的大小
        std::cout << sizeof(char) << std::endl;  // char 的大小为 1 字节, 所以打印 1.

        // 运算符 sizeof() 和 函数 strlen() 的对比

        // 字符数组 char[]
        char text1[] {"abcdef"};
        // 这里 sizeof() 返回字符串实际使用的内存, 包括字符'\0';
        size_t s1 {sizeof(text1)};  // 7
        size_t s2 {strlen(text1)};  // 6
        std::cout << s1 << " " << s2 << std::endl;

        // 指针 char*
        const char* text2 {"abcdef"};
        // 这里 sizeof() 返回指针的大小
        size_t s3 {sizeof(text2)};  // 8(依赖于平台)
        size_t s4 {strlen(text2)};  // 6
        std::cout << s3 << " " << s4 << std::endl;
    }

    {
        // 函数 strcmp()
        // 比较两个C风格字符串
        // 返回值:小于0的值; 0; 大于0的值
        const char* a {"12"};
        char b[] {"12"};

        int result {strcmp(a, b)};
        const char* sign {result == 0 ? "==" : result > 0 ? ">" : "<"};
        std::cout << a << sign << b << std::endl;
    }

    return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注