百科狗-知识改变命运!
--

char ch与char str 的区别

桃子1年前 (2023-12-16)阅读数 6#综合百科
文章标签是个字符串

仅名字不同.

我们一般定义变量名字都定义一个比较好理解的, 两个变量前一个名字要好一些

ch 是character的缩写

str是string的缩写

这个明显定义的是字符,所以第一个名字稍好,第二个容易产生误解

C++中的char是个基本类型,跟int一样;而string却是个库自带的类,声明的变量是个对象,但不需要程序员自动析构。他们都可以被自动初始化,但还是手动初始化更保险,免得使用不当,引起coredump

下面是c 中字符串与C++字符串的区别。希望下面的state能clarify your issue. :)

1)

在C语言中,将字符串作为字符数组来处理。即C string就是 char arrary[MAX_SIZE];字符数组。

而C++中的string 是 string class, 声明形式 string strObject.变量是个对象。只是他是C++ 标准库提供的string类,

其实现效果跟用户自定义的类一样。

2) C string 字符串可以用字符串数组 char Array[MAX_SIZE];与字符串变量 char *p; 两种方式来存储。

以 '\0'为字符串结束标志。

strlen 是把串结束符 '\0'算在内的,而sizeof是在对字符数组和字符变量的操作结果不一样,引起原理不一样。

strcmp, strncmp,连接使用strcat, 不能 str1+str2, strncat

strcpy, stncpy; strchr(str1, ch); 在str1中查找ch第一次出现的位置,返回指针变量

而C++ string是类,是对象.结束符是npos,或者-1;

不用指定字符数目的大小。

+ 取代了strcat

length和size取代了strlen

append, compare, substr,find, find_firt_of等函数

可以直接=, 而不用strncpy。

insert, replace, at, erase, clear, swap还有iterator函数的实现。

3)在函数实现部分

printf,scanf, fprinf等可以format的一个字符串中使用 "%s"时,只能用c string;如果是C++ string的话,就必须先变成

c string,否则就会报错。如:

a)

string str ("Test string");

printf("%s\n", str);

编译错误:warning: cannot pass objects of non-POD type 'struct std::string' through '...'; call will

abort at runtime

执行错误:Illegal instruction(coredump)

b)

void strprint(const char *s)

{

printf("function: %s\n%", s);

}

string str ("Test string");

strprint(str);

char ch与char str 的区别

编译错误:error: cannot convert 'std::string' to 'const char*' for argument '1' to 'void strprint(const

char*)'

因为c string是基本类型:char 或char array;而c++ string却是个类,是个对象。二者的实现截然不同,不同场合的使用需

要转换。

修改:只需要将a), b)中的str变为 str.c_str()即可。

对了这个C++ string的c_str()函数能给出c string 和C++ string的部分区别的解释。

4.头文件

只有在使用c string的strncpy, strtok等库函数时才include

而C++中,则在声明 string 对象时include

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)