我有一个题目,帮我看看,谢谢!

aixin1234567890 2009-05-25 11:14:13
有如下程序:
void test2()
{
 char string[10], str1[10];
 int i;
 for(i=0; i<10; i++)
 {
  str1[i] = 'a';
}
strcpy( string, str1 );
}
这个程序有错误,我不知道错在哪里,
帮我改正,谢谢!

...全文
96 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangzhongke007 2009-06-03
  • 打赏
  • 举报
回复
学习了~
aixin1234567890 2009-06-03
  • 打赏
  • 举报
回复
刚才我自己再试了一下,觉得4楼说得是正确的。
源程序如下:
#include <iostream.h>
#include <string.h>
void main()
{
char string[10], str1[10];
int i;
for(i=0; i <9; i++)
{
str1[i] = 'a';
}
str1[i]='\0'; //这个是字符串的标志
strcpy(string, str1);
cout<<string<<endl;
}


谢谢各位!
aixin1234567890 2009-06-03
  • 打赏
  • 举报
回复
有点儿道理!谢谢各位!
T技术沙龙 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
for(i=0; i <9; i++)
 {
  str1[i] = 'a';
}

str1[9]='\0'
[/Quote]
正解,没有的话后面的strcpy函数会造成越界的错误
wesweeky 2009-05-25
  • 打赏
  • 举报
回复
ls正解
pengzhixi 2009-05-25
  • 打赏
  • 举报
回复
for(i=0; i <9; i++)
 {
  str1[i] = 'a';
}

str1[9]='\0'
GoonYangXiaofang 2009-05-25
  • 打赏
  • 举报
回复
没有结束标记'\0'。
dl591944556 2009-05-25
  • 打赏
  • 举报
回复
for(i=0; i <10; i++)
 {
  str1[i] = 'a';
}
str1[9]='\0'
没有的话后面的strcpy函数会造成越界的错误
char * strcpy(char * strDest,const char * strSrc)
{
 if ((strDest == NULL) || (strSrc == NULL))
   throw "Invalid argument(s)";
 char * strDestCopy = strDest;
 while ((*strDest++ = *strSrc++) != '\0');
  return strDestCopy;
}

由于str1末尾没有'\0’结束标志,所以strcpy不知道拷贝到何时结束.
printf函数,对于输出char* 类型,顺序打印字符串中的字符直到遇到空字符('\0')或已打印了由精度指定的字符数为止.
fanana 2009-05-25
  • 打赏
  • 举报
回复
是的,字符数组的最后一位是要有结束标记\0的

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧