c语言程序输出的数据后面多了一些乱码

c语言程序输出的数据后面多了一些乱码,第1张

这个不是数组越界的问题。

scanf()对字符串的输入是不可以用逗号做间隔的。对于:

scanf("%ld,%s,%s",&p1->num,p1->name,p1->bthplc);

如果你输入的是:

100,xiao,guangzhou

那么执行后的结果是:

p1->num:100

p1->name:xiao,guangzhou

p1->bthplc:(未初始化,数据不可知)

由于p1->bthplc未初始化,所以会有乱码出现。

建议你采用三个数据分开输入的方式解决这个问题。如:

scanf("%ld,%s",&p1->num,p1->name);

scanf("%s",p1->bthplc);

输入时在name后面换行,这样:

100,xiao(回车)

guangzhou(回车)

101,ming(回车)

shanghai(回车)

0,0(回车)

0(回车)

这只是个折中的办法,不是很好,希望你可以写一个以逗号分割字符串的子函数实现愿意。

数组越界可以通过加大数组长度,或者动态开辟内存的方法解决。

另外,建议你把malloc开辟的内存在最后释放掉,养成个好习惯。

答案确实是3的,你在编译器中运行看结果就知道了。 这里,你要理解好ASCII码和转译字符“\”! 先看s[]字符串,"012xy\08s34f4w2",在这字符串中的"\0”是结束符,代表字符串结束的标记。那么s字符串其实就是""。 再看for(i=0;s[i]!=0;i++),其中的s[i]!=0其实就是s[i]!='\0',这个循环的意思其实就是,逐个判定字符串中的字符,当字符是数字(s[i]>='0'&&s[i]<='9')时候,n++。 字符串其实是"012xy",数字只有3个,所以n当然就是3了。 以上信息希望对你有帮助。。^^

我的理解是由于程序编译的时候分配内存是以堆栈的形式进行的,先b[0],b[1],再a[0],a[1];这样虽然a-1未定义,系统执行时仍把它指向了前一块内存区域,也就是b[1]。这样程序就相当于swap1(a,b+1);swap2(&b[0],&b[1]),前一个把a[0]和b[1]进行交换,之后a[0]=5,b[1]=3;然后在把b[0]和b[1]进行交换,之后b[0]=3,b[1]=3所以输出结果是5 5 3 3

如果在程序中只定义数组a,执行swap1(a,a-1),这时候a-1未分配内存,指向内容为一个随机数,程序也可以执行,不会报错。

以上就是关于c语言程序输出的数据后面多了一些乱码全部的内容,包括:c语言程序输出的数据后面多了一些乱码、c语言 程序运行后的输出结果是、程序运行后的输出结果是等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9690406.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存