C语言,关于printf()输出字符串(数组)出现乱码的解释,求给个比较专业、略微详细的解释? 50
#include<stdio.h>#include<stdlib.h>intmain(){charstr[7]="abcdefg";printf("%s\n",str);...
#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'就停止输入,那么是否只要没有遇到结束字符,不管什么原因、空间不够还好、没有拷贝还好
只要没看到结束字符,就会随机给个乱码输出吗?
希望能有个专业、详细点的解释,非常感谢!!! 展开
#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'就停止输入,那么是否只要没有遇到结束字符,不管什么原因、空间不够还好、没有拷贝还好
只要没看到结束字符,就会随机给个乱码输出吗?
希望能有个专业、详细点的解释,非常感谢!!! 展开
2个回答
展开全部
这么说吧,方式一和方式二申请的内存都不够。因为a-g共有7个字符、而你只申请了7,导致\0,没有空间。字符串是以\0为结束值、\0是系统自动加在字符串末尾的。也就就是说申请的空间必须要大于字符串的长度。
追问
(1)方式二 申请了100,肯定够啊
(2)为什么没空间存放'\0',没遇到结束字符就得输出乱码啊,不输出,或者输出其他不行么?
这个乱码输出的逻辑是什么?
而且既然都没空间了,代表已经扫描完这个字符数组了,那么这个乱码哪里来的?
追答
方式二你申请的空间没注意看,现在有点事,等下回复你
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询