字符串几种表现形式的输出中有一种的输出结果和其他的不一样是怎么回事?

目前知道的字符串有以下几种表现形式:

    // 字符串的几种表现形式
    char str1[] = "abc";
    char str2[100] = "abc";
    char str3[] = {'a' , 'b' , 'c'};
    char str4[100] = {'a' , 'b' , 'c'};
    char str5[] = {"abc"};
    char str6[100] = {"abc"};

输出他们的结果是:

clipboard.png

其中第五种表现形式对应的字符串定义是:char str3[] = {'a' , 'b' , 'c'} 。输出的语句是:printf("第五种表示:%s\n" , str3)

为什么会出现这样的结果??

完整的运行结果(仅出错部分)

clipboard.png

阅读 3k
2 个回答

linux下运行正常,无任何错误,看了楼上的答案,对于出现烫的原因有所学习,不过在linux下却未提示段错误,能否贴上全部代码.你第5种打印的str3?
xcode下运行结果:
图片描述
gcc下运行结果:
图片描述

在xcode下打印了两遍abc,a的ascii码值16进制形式61 = 97
gcc下应该默认给str4[3]='0',因此gcc下运行正常。

因此推断,这种错误依据编译器的不同处理不同,错误产生的原因是缺少显示的‘0’赋值,因此出现这种依据不同编译器而不同的行为。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进