C语言的字符串要注意最后一位默认是'/0'的问题。这是一个易错点。

strlen()计算长度时不考虑末尾的'\0'

//例1
void test1()
{
char string[];
char* str1 = "";
strcpy( string, str1 );
}
string定义的长度是10,str1的最后一位默认为'\0',所以str1其实长度为11。strcpy()函数中,如果第二个串比第一个串长,是没有error的,第一个串的长度会增加,并且也可以正确的输出第一个串。
但是存在潜在的内存错误的问题,也就是说,在内存中,如果紧接string之后有内容,将被覆盖,这样会导致string之后的内存存取错误。
来看一个好的写法:
void test2()
{
char string[], str1[];
int i;
for(i=; i<; i++)
{
str1[i] = 'a';
}
str1[] = '\0';//体现水平的一步
strcpy( string, str1 );
}

有的时候可能非常容易忽略这个小问题:

//例2
void test3(char* str1)
{
if(str1 == NULL){
return ;
}
char string[];
if( strlen( str1 ) <= )
{
strcpy( string, str1 );
}
}

这里if( strlen( str1 ) <= 10 )应该写成if( strlen( str1 ) < 10 ),因为strlen的结果未统计’\0’所占用的1个字节。

C字符串末尾的'\0'问题的更多相关文章

  1. sql server2005版本中,len函数计算了字符串末尾的空格

    sql server2005版本中,len函数计算了字符串末尾的空格的长度,以下是测试脚本: print @@version declare @v varchar(max) set @v = 'hp, ...

  2. NYOJ1026 阶乘末尾非0 【模板】

    阶乘末尾非0 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描写叙述 我们的问题非常是简单.n! 末尾非0数是几? 比方n=5的时候,n! =120,那么n!末尾非0数是2. ...

  3. 求N!末尾的0的个数(找规律+递归)

    0\'s Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 计算整数n!(n的阶乘)末尾有多少个0. 输入 第一行输入一个数T代 ...

  4. PHP导出Excel 数字末尾变0或小数点解决办法

    为了管理方便,查阅直观性.很多网站, 或者系统都会自带导出excel或者cvs的功能.但是很多情况下,由于数字超过15位,会被显示成0或者加小数点处理.造成这种情况是由于Excel内 置的数值有效范围 ...

  5. java去除字符串后面的\0

    java去除字符串后面的\0 private String filterCode(String string) { if (string != null) { string = string.trim ...

  6. 五、excel末尾补0和开头补0

    1.末尾补0 假设数据在A列,则在B1输入以下公式 如果长度不足10,在后面加0,否则等于A1 (1)=IF(LEN(A1<17),LEFT(A1&"0000000000&qu ...

  7. c语言中strcpy与strlen函数对字符串最后的'\0'的处理

    对于strcpy来说,它会把字符串最后的‘\0’一起拷贝 对于strlen来说,它计算字符串长度的时候不会把最后的‘\0’计算进去

  8. Shell脚本中字符串判空:使用-z 字符串长度为0时,为真,-n字符串长度不为0,为真。这两个都不靠谱【转】

    最近发现使用  -z   和  -n  来判断字符串判空,或不空时,很不靠谱. 使用下面的方法最可靠: if [ "x${value}" == "x" ]    ...

  9. Light oj 1138 - Trailing Zeroes (III) 【二分查找 &amp;&amp; N!中末尾连续0的个数】

    1138 - Trailing Zeroes (III) problem=1138"> problem=1138&language=english&type=pdf&q ...

随机推荐

  1. java面试笔记(2019)

    1. 堆啊,栈啊,内存溢出原因 2. Dubbo原理 3. Reids线程 4. 线程池安全 5. linux查看线程命令 6. ABA

  2. php程序的三大流程控制

    php程序的三大流程控制 ①  顺序控制(从上到下.从左到右) ②分支控制 if(条件表达式){ //n多语句 }else if (条件表达式){ //n 多语句 }else if(条件表示式){ / ...

  3. grunt前端打包——css篇

    [导读] 前端打包的工具有很多,我用的习惯的就是这个grunt,无论是你要在github上做开源,还是让自己的项目变得更易于维护,grunt都是首选. 前端打包的工具有很多,我用的习惯的就是这个gru ...

  4. erlang进程监控:link和monitor

    Erlang最开始是为了电信产品而发展起来的语言,因为这样的目的,决定了她对错误处理的严格要求.Erlang除了提供exception,try catch等语法,还支持Link和Monitor两种监控 ...

  5. Cesium--气泡弹窗

    参考资料 首先感谢以下博主们的帮助,本人刚接触Cesium不久,无奈只能拾人牙慧了. 由于cesium没有自带的点击弹出气泡的功能,所以需要自己去开发一个这样的功能,网络上资源很多,看到基本思路都一致 ...

  6. hdu 5538 House Building(长春现场赛——水题)

    题目链接:acm.hdu.edu.cn/showproblem.php?pid=5538 House Building Time Limit: 2000/1000 MS (Java/Others)   ...

  7. eclipse转到IntelliJ IDEA 2017.1入坑指南

    最近准备从eclipse转到IDE上去,由于eclipse占用的内存太大,而且IDE看着逼格还是比较大的,在转移项目的时候遇到好多的坑呀!在这里记录一下 关于:2017.1版本 之前装的是2016的版 ...

  8. GS(道具,帮会)定时存储

    //最近数据库存储做了重大改变,数据库内部的回头再说,先看看GS这边的 .现在感觉数据库的状态将请求包放入命令队列中,以前是全部放进去,这样让其他的数据库操作不会随着数据库定时器而变慢,GS线程去驱动 ...

  9. webstorm vscode 常用设置

    webstorm常用的设置及操作图解 VS Code 新建vue文件初始化模板 VSCode新建vue文件自定义模板

  10. 九度OJ 1173:查找 (排序、查找)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5808 解决:3163 题目描述: 输入数组长度 n  输入数组      a[1...n]  输入查找个数m  输入查找数字b[1...m ...