C语言里一个小问题
源程序如下:
main(){ char str1[20]; char str2[20]; scanf("%22s",str1); printf("your put char is %s",str1);} scanf("%22s",str1);
[解决办法]
输入的数据存储在str1中及后面的存储单元,恰好后面的储单元是合法的(也有可能报错)
而输出时会输出一个字符串以'/0'结尾。
[解决办法]
str1是20字符的内存,虽然可以接收22个,但运行时若输入超过20个字符容易造成错误
[解决办法]
我的tinycc 0.9.25 for winxp报告是内存出错,不能写。
你写的意思很清楚,最多取22个字符到str1,而你的str1只有20个位置,scanf就一直往下写够22个字符,如果这后2个字符冲入了main函数的返回地址就会出错,另外输出的时候printf也不知道'\0'这个结束符在哪,就会一直输出直到遇见它。我的问题可能是第一个,第21,22个字符覆盖main的返回地址,至于在main函数的栈上面存的是什么就要看编译器的实现了。试着把str1和str2交换结果就会不同。
你的问题调试或反汇编一下就知道了。
另外我用的微型编译器有源代码http://bellard.org/tcc/
你可以下载来看看C编译器的实现。
[解决办法]
printf遇\0结束,因此能输出,但是堆栈被破坏。