c/c++ | 字符串函数总结 | 为什么总喜欢纠结sizeof 和strlen 呢?

本文通过实例讲解了C/C++中的字符串处理函数如strncpy,strcpy以及strlen,以及sizeof和C++标准库容器类和字符串类的length和size区别。
摘要由CSDN通过智能技术生成

其实时间长了,稍微研究后,再来品味,别有一番滋味
总是看着混乱,但是静下来看,还是能琢磨透的,只是看着复杂,本质是两套风格,然后又要有交集,所以就看起来复杂

// 首先字符串   在c++ 风格叫字符串,在c风格 叫字符数组

//sizeof	获取对象大小、数据类型大小

//strlen 	用于获取以空字符 \0 结尾的字符串的长度	#include <cstring>(C)或 #include <string>(C++)

// size		仅适用于C++标准库的容器类,用于获取容器中元素的数量

//length	仅适用于C++标准库的字符串类(如 std::string),用于获取字符串的长度。
//			其中length 和size的区别  前者是使用string 字符串 后者适用于所有C++标准库的容器类,包括 std::vector、std::list、std::set 

int main()
{
    
    char source[] = "Hello";
    char destination[2];
    char tem[128] = {0};
    char tem2[128] = {0};
    char tem3[128] = {0};

    strncpy(destination, source, 3);
    for(int i = 0; i < sizeof(destination); ++i){
        std::cout<<destination[i]<<" "<<std::endl;
    }
    
    strcpy(tem, destination);
    strncpy(tem2, destination, sizeof(destination));
    strncpy(tem3, destination, strlen(destination));
    //destination[5] = '\0';
    printf("\n");
    std::cout << "Destination: " << destination <<"\ntem: "<< tem<<"\ntem2:"<<tem2<<"\ntem3:"<<tem3<<std::endl;

    return 0;
}

/*
输出
H 
e 

Destination: Helello
tem: Helello
tem2:He
tem3:Helello
*/


/*
解答:
	Destination对象分配的内存为2	所以字符数组只有两个字符 H e
	tem  是完整的 destination数组 因为字符数组空间不够用,所以没有在字符数组里面截断,所以长度还是最开始的长度
	tem2 是截取 destination的两个元素
	tem3 截取的是destination 到 \0 的元素 也就是完整的字符串内容
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值