C语言字符串输出不对的问题

1. ‘\0’的问题

用char数组存储的时候要特别小心,例如我们要存储三个数字

int main()
{
    char num[3];
    num[0]='0';
    num[1]='1';
    num[2]='2';
    printf("%s",num);
    return 0;
}

结果
输出

我们输出了123还有而外的6个字符,我用的是vs2015,打开内存查看器,根据num的地址定位到num在内存中存储的位置,如下图所示

内存查看

printf输出的图上画红线的地方,(31) (32) (33) (cccc) (cccc) (cc40) (f82f) (01ce) (1fcc)
最后的00会被翻译成\0所以就停止输出了,至于为什么这么多cc,应该是栈空间未初始化的空间都被初始化成了cc,所见经常喜闻乐见的见到烫烫烫

刚刚是局部变量,那我们再试一下全局变量

char num[3];
int main()
{
    num[0]='0';
    num[1]='1';
    num[2]='2';
    printf("%s",num);
    return 0;
}

结果

结果

正常输出了123,接下来我们看一下内存的情况

内存

内存里存了31 32 33 然后紧接着就是0000会被理解成\0所以就停止的输出,全局变量区不会像堆区那样初始化成cc,都是初始化成了00,所以这才遇见了终止符号,停止了输出。那是不是全局变量就不用定义了终止符了呢?那并不是这样的,当然还是要定义终止符号的!!!

2. 中文的问题

这个问题就相对比较简单了,中文用两个字节来存储,意思就是char c[2]只能存储一个中文字符,这可能是初学时容易忽略的问题。

编译器:VS2015

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值