原创作者:郑同学的笔记
原文链接:https://zhengjunxue.blog.csdn.net/article/details/144633919

一、char*和char[]互转

  • char[] 转char*
    char[] 本质上是一个字符数组,char* 是指向字符的指针。它们之间的转换非常简单,因为数组名可以隐式地转换为指向数组第一个元素的指针。
#include <iostream>
int main() {
    char arr[] = "Hello";
    char* ptr = arr;  // char[] 隐式转换为 char*

    std::cout << "char[]: " << arr << std::endl;
    std::cout << "char*: " << ptr << std::endl;

    return 0;
}
  • char转char[]
    char
    和 char[] 之间的转换实际上没有直接的方法,因为它们在内存中的表现是不同的。char* 是一个指向字符数组的指针,而 char[] 是一个固定大小的字符数组。
    最常见的做法是通过拷贝操作来实现,即将 char* 指向的字符串复制到一个固定大小的 char[] 中。这通常通过标准库函数 memcpy or strcpy 来实现。
#define _CRT_SECURE_NO_WARNINGS 
#include <iostream>
#include <cstring>  // 为了使用 strcpy

int main() {
    const char* ptr = "Hello, World!";  // char* 指针指向一个字符串字面量
    char arr[50];  // 定义一个足够大的 char[] 数组
    char arr2[50];
    
    std::strcpy(arr, ptr);

    memcpy(arr2, ptr, sizeof(arr2));

    std::cout << "char*: " << ptr << std::endl;
    std::cout << "char[]: " << arr << std::endl;
    std::cout << "char[]: " << arr2 << std::endl;

    return 0;
}

二、char* 和 std::string 之间的转换

  • 可以通过构造 std::string 来将 char* 转换为 std::string。
  • 反过来也可以通过 std::string 的 c_str() 方法将 std::string 转换为 char*(返回的是一个 const char*,但可以通过 const_cast 将其转换为 char*,但不推荐这么做)。
#include <iostream>
#include <string>

int main() {
    // char* to string
    const char* ptr = "Hello, World!";
    std::string str(ptr);

    // string to char*
    const char* ptr2 = str.c_str();

    std::cout << "char*: " << ptr << std::endl;
    std::cout << "std::string: " << str << std::endl;
    std::cout << "const char*: " << ptr2 << std::endl;

    return 0;
}

三、char[] 和 std::string 之间的转换

  • 你可以通过直接使用 std::string 构造函数来将 char[] 转换为 std::string。这会创建一个以 null 终止符(\0)结束的字符串。
  • 将 std::string 转换为 char[] 需要调用 std::string 的 c_str() 方法,该方法返回一个 const char*,指向字符串的数据。要转换为 char[](即可以修改的数组),你需要复制内容到一个新的 char[] 数组中。注意:std::string 的 c_str() 返回的是一个 const char*,如果你需要一个可修改的字符数组,必须做拷贝。
#define _CRT_SECURE_NO_WARNINGS 
#include <iostream>
#include <string>

int main() {
    // char[] 转换为 std::string
    char arr[] = "Hello, World!";
    std::string str(arr);  // 直接将 char[] 传给 std::string 构造函数

    // string to char[]
    char arr2[50];
    
    //std::strcpy(arr2, str.c_str());  // 使用 strcpy 复制内容
    memcpy(arr2, str.c_str(), 50);

    std::cout << "char[]: " << arr << std::endl;
    std::cout << "std::string: " << str << std::endl;
    std::cout << "char[]: " << arr2 << std::endl;

    return 0;
}

四、 int 和 std::string 之间的转换

  • std::to_string() 可以将 int 转换为 std::string。
  • 反过来可以使用 std::stoi() 来将字符串转换为 int。
#include <iostream>
#include <string>

int main() {
    // int to string
    int num = 123;
    std::string str = std::to_string(num);

    // string to int
    int num2 = std::stoi(str);

    std::cout << "int: " << num << std::endl;
    std::cout << "std::string: " << str << std::endl;
    std::cout << "converted int: " << num2 << std::endl;

    return 0;
}

五、double 和 std::string 之间的转换

  • 同样,std::to_string() 可以将 double 转换为 std::string,
  • 反过来可以使用 std::stod() 将字符串转换为 double。
#include <iostream>
#include <string>

int main() {
    // double to string
    double d = 123.456;
    std::string str = std::to_string(d);

    // string to double
    double d2 = std::stod(str);

    std::cout << "double: " << d << std::endl;
    std::cout << "std::string: " << str << std::endl;
    std::cout << "converted double: " << d2 << std::endl;

    return 0;
}
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐