博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符导致的不便
阅读量:5830 次
发布时间:2019-06-18

本文共 1355 字,大约阅读时间需要 4 分钟。

        char字符数组是非常原始的,容易发生一些奇怪的事情。先看一下下面的代码及程序运行结果:

#include 
#include
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;}

        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,这样就正常了。

转载于:https://www.cnblogs.com/Genesis2018/p/9079842.html

你可能感兴趣的文章
《写给大忙人看的java se 8》笔记
查看>>
倒计时:计算时间差
查看>>
Linux/windows P2V VMWare ESXi
查看>>
Windows XP倒计时到底意味着什么?
查看>>
tomcat一步步实现反向代理、负载均衡、内存复制
查看>>
运维工程师在干什么学些什么?【致菜鸟】
查看>>
Linux中iptables详解
查看>>
java中回调函数以及关于包装类的Demo
查看>>
maven异常:missing artifact jdk.tools:jar:1.6
查看>>
终端安全求生指南(五)-——日志管理
查看>>
Nginx 使用 openssl 的自签名证书
查看>>
创业维艰、守成不易
查看>>
PHP环境安装套件:快速安装LAMP环境
查看>>
CSS3
查看>>
ul下的li浮动,如何是ul有li的高度
查看>>
C++ primer plus
查看>>
python mysqlDB
查看>>
UVALive 3942 Remember the Word Tire+DP
查看>>
从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~目录...
查看>>
被需求搞的一塌糊涂,怎么办?
查看>>