字符导致的不便
2015-09-24 18:03
501 查看
char字符数组是非常原始的,容易发生一些奇怪的事情。先看一下下面的代码及程序运行结果:
![](http://img.blog.csdn.net/20150924175924385?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
str1 和 str2分别声明为char[5]、char[3],然而abcde、fghi字符串要在字符结束的地方加上NULL,分别需要6、4个字符的空间,但是代码中只分别为其分配了5、3个字节的空间。因此,abcde后面的NULL字符以及fgh后面的NULL字符都没能放入而被舍弃了。故而在显示str2时,首先显示fgh,然后是显示与之相邻的空间里保存的abcde。
函数开始部分的int x=9252;语句在内存中写入的整数9252。9252用16进制表示就是2424,在ASCII码中24是$。因此这个整数被解释为有两个$并列的字符串的一部分。与之相邻的内存中是00,被当做是NULL字符,显示到此终止。然而,在某些情况下可能显示出更多的内容,并且有可能会试图读取那些禁止读取的内容,从而造成程序的异常终止。
用str3[9]来存放abcde、fghi字符串,结尾处加上’\0’,再输出str3,这样就正常了。
<span style="font-size:18px;">#include <stdio.h> #include <stdlib.h> int main() { int x = 9252; char str1[5] = "abcde", str2[3] = "fgh"; int i; printf("The elements of str1 : "); for(i=0; i<5; i++) printf("%c ", str1[i]); printf("\n"); printf("The elements of str2 : "); for(i=0; i<3; i++) printf("%c ", str2[i]); printf("\n"); printf("----------------------------\n"); printf("str1 : %s\n", str1); printf("str2 : %s\n", str2); printf("The length of str1 : %d\n", strlen(str1)); printf("The length of str2 : %d\n", strlen(str2)); printf("----------------------------\n"); char str3[9]; for(i=0; i<5; i++) str3[i] = str1[i]; for(i=0; i<3; i++) str3[i+5] = str2[i]; str3[9] = '\0'; printf("str3 : %s\n", str3); printf("The length of str3 : %d\n", strlen(str3)); return 0; } </span>
str1 和 str2分别声明为char[5]、char[3],然而abcde、fghi字符串要在字符结束的地方加上NULL,分别需要6、4个字符的空间,但是代码中只分别为其分配了5、3个字节的空间。因此,abcde后面的NULL字符以及fgh后面的NULL字符都没能放入而被舍弃了。故而在显示str2时,首先显示fgh,然后是显示与之相邻的空间里保存的abcde。
函数开始部分的int x=9252;语句在内存中写入的整数9252。9252用16进制表示就是2424,在ASCII码中24是$。因此这个整数被解释为有两个$并列的字符串的一部分。与之相邻的内存中是00,被当做是NULL字符,显示到此终止。然而,在某些情况下可能显示出更多的内容,并且有可能会试图读取那些禁止读取的内容,从而造成程序的异常终止。
用str3[9]来存放abcde、fghi字符串,结尾处加上’\0’,再输出str3,这样就正常了。
相关文章推荐
- git 服务器搭建及一些命令说明
- 图片隐写
- getPropertyDescriptors()获取类的属性
- 解决MYSQL 中文乱码
- UI - UIImageViewAndSlider
- 晒淘宝网技术内幕
- 开始写博客啦
- 将其他js类库制作成seajs模块
- Run as ant build每次都执行两次-问题解决
- Git 常用命令大全
- 图像处理和计算机视觉中的经典论文
- TIME_WATI过多
- 潘鹏整理WPF(12)程序集资源
- Git 常用命令详解(二)
- QT程序发布提示driver not load
- 定时任务配置
- ios9适配 微信支付/支付宝支付
- UI - UISegmentedControl
- Java(2)--单例模式
- 005 执行mapreduce加强,利用hive统计分析电商网站用户行为指标