C++学习之字符

参考文献

char*/char[]/string

#include<iostream>
#include<string>
#include<cstring>
using namespace std;

int main(){
    
    
    /* 定义一个const char* 然后将其转化为一个char* */
    const char *strs = "test_string";
    string tempStrs(strs); // strs转换为string
    char *dstStrs = const_cast<char*>(tempStrs.c_str()); // 再将string转换char*类型
    printf("dstStrs: %s\n", dstStrs);

    /* 使用一个char* 为另外一个char* 赋值 */
    char* src_strs = "Iam src_strs"; // C++中不建议这种char*的直接指向一个字符串,但是c中却可以
    char* dst_strs_ptr = NULL;

    dst_strs_ptr = src_strs; // 不建议这种char*的直接赋值操作,因为两者指向的地址完全
                             // 相同,当src_strs内容被修改时,dst_strs的也会被修改
    cout <<static_cast<void *>(src_strs) << endl;
    cout <<static_cast<void *>(dst_strs_ptr) << endl; 
    cout << " " << endl;

    // 赋值方式一:转给string后再转为char*
    std::string tempStrsPtr(src_strs);
    dst_strs_ptr = const_cast<char*>(tempStrsPtr.c_str());
    cout <<static_cast<void *>(src_strs) << endl;
    cout <<static_cast<void *>(dst_strs_ptr) << endl; // 这种赋值方式为dst_strs_ptr单独开辟了一块地址空间
    cout << "dst_strs_ptr is: "  << dst_strs_ptr << endl;
    

    // 赋值方式二:使用strncpy或者strcpy
    strcpy(dst_strs_ptr, src_strs);
    cout <<static_cast<void *>(src_strs) << endl;
    cout <<static_cast<void *>(dst_strs_ptr) << endl; // 
    cout << "dst_strs_ptr is: " << dst_strs_ptr << endl;

    strncpy(dst_strs_ptr, src_strs, strlen(src_strs)+1);
    cout <<static_cast<void *>(src_strs) << endl;
    cout <<static_cast<void *>(dst_strs_ptr) << endl; // 
    cout << "dst_strs_ptr is: " << dst_strs_ptr << endl;
    cout << " " << endl;


    /* 使用char* 为char[] 赋值 */
    char* src_strs_2 = "data";
    char dst_strs_arr[] = "temp";
    cout << &dst_strs_arr << endl;

    // dst_strs_arr = src_strs_2; // char*转char[]是无法直接用=赋值的
    strncpy(dst_strs_arr, src_strs_2, strlen(src_strs_2)+1);
    cout << dst_strs_arr << endl;

	/*char[]的一种初始化方法*/
    char *pointer = (char*)malloc(sizeof(char) * 12); // 使用molloc申请一个动态空间,使用后需要free
    pointer = "Hello world";
    cout << pointer << endl;
    
    return 0;
}

注意的点

(1) 不可以直接使用char* 对char* 赋值

char *s1 = "NULL";
char *s2 = s1; // s1和s2指向同一个地址,当s1指向的内容发生改变时,s2可能也会改变

正确的做法如下

char *src = "test";
char *dst = NULL;
// 方法一:使用stncpy


猜你喜欢

转载自blog.csdn.net/qawsedrf123lala/article/details/122010043
今日推荐