小程序找错

来源:百度知道 编辑:UC知道 时间:2024/06/07 21:12:14
int main()
{
char st[10]={0}, str1[10];
for(int i=0;i<10;i++)
{
str1[i]='a';
}
strcpy(st,str1);
printf("%s\n",st);//输出什么?
return 0;
}
1楼你试过了?什么编译器?

char st[10]={0}
定义的是10元素数组
strcpy(st,str1);
copy进来的是10个'a'

输出是%s(字符串格式) 这个输出是从数组首地址一直输出直到内存中有'\0'结束

前面st数组中存进了10个‘a’那么 '\0'存在哪了?

没怎么错啊~输出的全是a啊~

你的程序有问题,得不到正确结果
由于你用字符数组存放字符串,
所以需要显式输入串尾符'\0',
否则
strcpy(st,str1);的时候,会由于没有找到串尾符,
而不能在你希望的地方拷贝结束。

这么改,就对了:
#include<stdio.h> //加上头文件
#include<string.h> //加上头文件,strcpy用

int main()
{
char st[10]={0}, str1[10];
for(int i=0;i<9;i++)//这里将i<10改为i<9,空出一位成员用以赋串尾符
{
str1[i]='a';
}
str1[9]='\0';//将字符数组最后一位赋为串尾符'\0'
strcpy(st,str1);

printf("%s\n",st);//输出什么?
return 0;
}

输出结果为:
aaaaaaaaa