C语言,关于字符串与字符数组问题,求高手指点一二啊,谢谢 !!!!

#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){charstr[10];char*str1=... #include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str[10];
char *str1="01234567891";
strcpy(str,str1);
printf("%s",str);
system("pause");
return 0;
}
为什么str字符数组只申请了10个空间,但是输出结果却为:01234567891,加上结束字符总共12个呢
展开
 我来答
寂寞而莫我知也
2012-11-19 · TA获得超过284个赞
知道小有建树答主
回答量:347
采纳率:0%
帮助的人:228万
展开全部
数组越界了,但是编译器不会报错。但是在以后写程序会出现BUG,有时会中断程序等。所以要养成良好的习惯。
更多追问追答
追问
怎么说,为什么出错的情况下还能正常输出?
追答
越界的数存储在相邻的存储单元里面,这个也怎么说呢,编译器没有报错,也能输出,因为你字符串的结束标记是'\0',他必须要把'\0'之前的字符全部输出去。呵呵
cpucash
2012-11-19 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:958万
展开全部
是可以用,但是很危险,呵呵
str是申请了10个单位的内存空间,如果他后面有自由的内存空间,那么可以改写,也就是你程序的strcpy(str,str1);操作,没什么危险
如果不是自由的空间,那么改写了别的数据,呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
k462846
2012-11-19
知道答主
回答量:38
采纳率:0%
帮助的人:13.7万
展开全部
数组越界了,str1实质上上也是开辟了一块内存,它将首地址赋值给str ,str里面存的就是str1里面的内容了,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2012-11-19 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6424万
展开全部
C的教科书中一再声明,使用strcpy(str1,str2)时一定要保证str1有足够的空间保证str2拷入。言下之意,strcpy不检查str1是否能容纳str2的拷入,正确性完全由程序员来控制。你把"01234567891"拷入到str[10]中,前10个字符是保险的,后二个字符就“难说”了。之所以“难说”,是因为最后2个字符空间没有分配给str,属于“自由”空间,系统就可能会分配给别的变量使用。如果不分配给别的变量,那你的代码就可能“永远”正常运行下去,但一旦分配给了别的变量,其内容就可能不再是你拷入的91了……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-11-19
展开全部

我不知道你用的是什么编译器跑这个程序的,不过我在我的VS2012下跑这程序提示错误。

 

很明显, 栈分配的空间不够, 复制出错.

追问
我用的是dev-c++,编译器是gcc,可能是编译器不同所导致的吧
追答
这种错误有时候很难发现的,多练习会好点,C里面还有很多易错的地方,别掉陷阱啦,呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式