使用C风格字符串你必须知道的几点

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

0.
所有人都知道的一点:
C风格字符串都是以'\0'结尾的。所以如果拷贝一个字符串,请确保计算的长度已经考虑了这个结尾符号。
另外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。)


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


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值