C语言,关于printf()输出字符串(数组)出现乱码的解释,求给个比较专业、略微详细的解释?
追我想追 2015-09-12 11:07:10 #include <stdio.h>
#include <stdlib.h>
int main()
{
char str[7]="abcdefg";
printf("%s\n",str); //方式一:数组分配空间不够,导致没地方存放‘\0’,输出乱码
int i;
char str1[100];
for(i=0;i<7;i++)
{
str1[i]=str[i];
}
printf("%s\n",str1); //方式二:数组copy过程中,没有copy到'\0',导致输出乱码
char str2[]="hjisajnaiji\0huisajhisaji"; //方式三,printf()和puts()的比较
printf("%s\n",str2);
puts(str2);
return 0;
}
代码中有方式一和方式二两种情况,最后都会输出乱码,原因我大概知道,但为了更方便地理解这个知识点,希望更加专业的解释……
(1)方式一是空间不够存储'\0',相反方式二是空间足够、但是最后'\0'没有copy过来
请问,方式一和方式二的区别与联系是什么?
(2)方式三比较了printf()和puts()的输出情况,应该是一样的
问题是:printf()和puts()都是遇到结束字符'\0'就停止输入,那么是否只要没有遇到结束字符,不管什么原因、空间不够还好、没有拷贝还好
只要没看到结束字符,就会随机给个乱码输出吗?
希望能有个专业、详细点的解释,非常感谢!!!