输入一个4位的数字(1,2,3,4),存在字符串s1[4]中。
输入一个要插入的字符(W),存在字符c中。
s2[7]用来存储c插入s1后的结果,结果应该为“1W2W3W4”。
为什么puts(s2)输入的有乱码,我用的是win7+C-Free4.0。
代码如下:
#include
int main()
{
char s1[4],s2[7],c;
int i,j;
printf("请输入s1:");
gets(s1);
printf("*****s1输入成功*****\n");
puts(s1);
printf("\n");
printf("请输入要插入的字符:");
scanf("%c",&c);
fflush(stdin);
printf("*****要插入的字符c输入成功*****\n");
printf("%c\n",c);
printf("\n");
for(i=0,j=0;j<=6;i++,j++)
{
s2[j]=s1[i];
s2[j+1]=c;
j++;
}
printf("*****c字符插入s2字符串成功*****\n");
for(i=0;i<7;i++)
{
printf("%c",s2[i]);
}
printf("\n");
for(i=0;i<7;i++)
{
printf("s2[%d]=%c ",i,s2[i]);
}
printf("\nputs()输出:");
puts(s2);
return 0;
}
结果如下:
puts(char *) 的输出格式是遇到'\0' 结束输出,s2所指向的字符串末尾没有'\0',所以就把非法内存的东西输出出来了。
可以自己在字符串的最后追加个‘\0’结束!可以解决该问题。
把这行的“for(i=0,j=0;j<=6;i++,j++)”中的“j<=6”改为“i<=4”,把s1[4]='\0'复制过去,s2就有了字符串结束标记了,不会再非法输出内存了。
修改后的:
#include
int main()
{
char s1[4],s2[7],c;
int i,j;
printf("请输入s1:");
gets(s1);
printf("*****s1输入成功*****\n");
puts(s1);
printf("\n");
printf("请输入要插入的字符:");
scanf("%c",&c);
fflush(stdin);
printf("*****要插入的字符c输入成功*****\n");
printf("%c\n",c);
printf("\n");
for(i=0,j=0;i<=4;i++,j++)
{
s2[j]=s1[i];
s2[j+1]=c;
j++;
}
printf("*****c字符插入s2字符串成功*****\n");
for(i=0;i<7;i++)
{
printf("%c",s2[i]);
}
printf("\n");
for(i=0;i<7;i++)
{
printf("s2[%d]=%c ",i,s2[i]);
}
printf("\nputs()输出:");
puts(s2);
return 0;
}