我是靠谱客的博主 怕孤独绿茶,最近开发中收集的这篇文章主要介绍使用C风格字符串你必须知道的几点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近在看C代码写的开源软件putty,因为C代码经验非常少,分析起来很吃力,觉得把C语言的一些特性在复习一下很有必要,这里利用中午的半个小时把C风格的字符串总结一下:

0.
所有人都知道的一点:
C风格字符串都是以''结尾的。所以如果拷贝一个字符串,请确保计算的长度已经考虑了这个结尾符号。
另外C风格的字符串是在内存上申请数组存储的,所有的保护措施需要申请者自己维护,new过之后一定要delete。

1.
C风格字符串如:“Hello World!”,实际上是长度为n的const char 数组。当你赋值给一个非const 的 char* 时,编译器并不做限制。
因此这潜在的会导致一些风险:

char* pStr = “Hello World!”;
pStr [0] = "h";

第二句会导致程序崩溃,因为你试图给一个const char 数组的0下标元素赋值。

如何避免这个问题呢?

char arr[] = " Hello World! ";
arr[0] = 'h';

使用char arr[] 来初始化一个字符串数组,编译器会帮助你申请一个合适的内存并拷贝。这个数组正如声明一样,是非const的。

2.
时刻记住你当前处理的是字符数组指针还是一个数组?请看下面的区别:

char* pStr = “Hello World!”;
int n1= sizeof(pStr ); // n1 值: 4
int n2 = strlen(pStr ); // n2 值:12

char arr[] = " Hello World! ";
int n3= sizeof(arr);  //n3值:13
int n4= strlen(arr);   //n4值:12


3.
字符串内容的比较:
char* a = "12";
char b[] = "12";

if (strcmp(a, b) == 0)
{
    //Todo:
}

不可以直接比较两个字符串变量:
if (a == b) //错误用法
{
    //
}
直接使用比较运算符是C++风格字符串string的用法,也是使用C++风格字符串的优势。
(题外话:STL中的string并不是一个类,而是basic_string<char> 类的typedef。)


注:
目前只想到这三点,后续慢慢增加。


最后

以上就是怕孤独绿茶为你收集整理的使用C风格字符串你必须知道的几点的全部内容,希望文章能够帮你解决使用C风格字符串你必须知道的几点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(80)

评论列表共有 0 条评论

立即
投稿
返回
顶部