这个不是数组越界的问题。
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语言 程序运行后的输出结果是、程序运行后的输出结果是等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)