C语言 字符串的输出,为什么输出那么多‘烫’呢?

#include<stdio.h>#definemaxsize100structstring{chars[maxsize];};voidinit(structstring... #include <stdio.h>
#define maxsize 100
struct string{
char s[maxsize];
};
void init(struct string l){
int i;
for(i=0;i<maxsize;i++)
l.s[i]='\0';
}
void main(){
struct string l;
int i,j=0;
init(l);
for(i=0;i<3;i++)
scanf(" %c",&l.s[i]);
while(l.s[j]!='\0')
printf("%c",l.s[j++]);
}
展开
 我来答
百度网友4217d48
2019-06-27 · TA获得超过4221个赞
知道答主
回答量:17
采纳率:0%
帮助的人:4620
展开全部

输出"烫烫烫烫"是因为vc会自动把未用函数的局部变量空间按字节全部初始化为CC。而定义的字符数组空间不够,所以就占用了那部分不属于自己的空间,因为cout输出char*是要遇到空字符才停止的,所以便把那些垃圾都打出来了。

即是说在最后没有字符串结束标志'\0'。

扩展资料

(1) 初始化内存和变量

包括用 0xCC 初始化所有自动变量,0xCD ( Cleared Data ) 初始化堆中分配的内存(即动态分配的内存 ),0xDD ( Dead Data ) 填充已被释放的堆内存(例如 delete ),0xFD( deFencde Data ) 初始化受保护的内存。

这样做的好处是这些值都很大,作为指针是不可能的(而且 32 位系统中指针很少是奇数值,在有些系统中奇数的指针会产生运行时错误),作为数值也很少遇到,而且这些值也很容易辨认,因此这很有利于在 Debug 版中发现 Release 版才会遇到的错误。

要特别注意的是,很多人认为编译器会用 0 来初始化变量,这是错误的(而且这样很不利于查找错误)。

(2) 通过函数指针调用函数时,会通过检查栈指针验证函数调用的匹配性(防止原形不匹配)。

参考资料来源:百度百科-字符串

四舍五不入6
高粉答主

2020-03-22 · 醉心答题,欢迎关注
知道答主
回答量:147
采纳率:100%
帮助的人:2万
展开全部

输出"烫烫烫烫"是因为vc会自动把未用函数的局部变量空间按字节全部初始化为CC。

而定义的字符数组空间不够,所以就占用了那部分不属于自己的空间,因为cout输出char*是要遇到空字符才停止的,所以便把那些垃圾都打出来了。

即是说在最后没有字符串结束标志'\0'。

扩展资料:

字符串的函数应用

1、连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn.

2、求子串。 Copy(s,I,I) 从字符串s中截取第I个字符开始后的长度为l的子串。

3、删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。

例:s:=’abcde’;delete(s,2,3);结果s:=’ae’

参考资料来源:百度百科-字符串

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天云小店
推荐于2018-02-26 · TA获得超过2.8万个赞
知道大有可为答主
回答量:3281
采纳率:91%
帮助的人:757万
展开全部

出现“烫”的原因是由于字符数组中的某些数组元素没赋值。


具体原因可以通过如下实例来进行说明:

char a[10];
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
a[3] = 'd';
printf("%s", a);  // 输出结果就会出现很多“烫”,因为只对数组a中前四个元素进行了赋值,后面的元素未进行赋值,所以计算机默认就输出“烫”

如果作如下修改就会正常输出

char a[10];
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
a[3] = 'd';
a[4] = '\0';
printf("%s", a);  // 输出abcd,因为加了结束字符'\0',而C语言中输出字符串是以结束字符'\0'作为结束输出的,所以只输出'\0'前面的所以字符,即abcd
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天天向上李亚飞
推荐于2017-11-25 · 学习——就要天天向上!
天天向上李亚飞
采纳数:540 获赞数:3877

向TA提问 私信TA
展开全部
#include <stdio.h>
#define maxsize 100
struct string{
char s[maxsize];
};
void init(struct string *l){
int i;
for(i=0;i<maxsize;i++)
l->s[i]='\0';
}
void main(){
struct string l;
int i,j=0;
init(&l);
for(i=0;i<3;i++)
scanf(" %c",&l.s[i]);
while(l.s[j]!='\0')
printf("%c",l.s[j++]);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rgzbr
2012-03-25 · TA获得超过186个赞
知道答主
回答量:147
采纳率:100%
帮助的人:68.6万
展开全部
本程序的要求是先输入一个字符串,再依次打印出来。不过这个字符串里面运用了结构体
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式