C语言题目 目的是插入空格在字符串中 显示int到char截断怎么处理 以及程序怎么修改 谢谢谢

#include<stdio.h>
#include<string.h>
#include<ctype.h>
void fun(char *s)
{
int i;
for(i=strlen(s);i<0;--i)//
{
*(s+2*i)=*(s+i);
*(s+2*i-1)=' ';
}
}
int main()
{
char a[20];
printf("请输入一个字符串:\n");
gets_s(a,20);
fun(a);
printf("新字符串是:\n");
puts(a);
return 0;
}

看你的代码意思是想在每个字符之间插入空格,但你fun函数写法有错:

一、你的i循环,是自减循环,i初始是字符串的长度,那么循环条件写反了,不能写i<0,这样循环不执行。要么大于要么大于等于。

二、你想要在每个字符间插入空格,那么定义数组大小必须给空格留下位置,你定义20输入就用满是不行的。

三、关键!!!你定义数组大小20,gets_s写入上限也是20,i初值就是字符串长度,那么假设你输入把20个字符空间都填满了。那么fun函数中循环*(s+2*i)就直接访问到数组最大长度以外的地址了。这叫越界访问,是不允许的。

四、既然上面说的代码已经有错,错误基础上的运行结果,没有参考价值。

五、按照你的思路需插入空格的数量是长度-1,所以插入后长度为2*len-1,所以插入后的最后一个字符所在位置是s-字符串长度-1,就是s-2*i-1-1。

我下面把你的代码改一下给你参考(由于gets_s不是基本库函数,我的编译器下没有,用scanf临时代替,scanf没有输入保护,不要输入超出长度):

#include<stdio.h>

#include<string.h>

#include<ctype.h>

void fun(char *s)

{

    int i;

    //需插入空格的数量是长度-1,所以插入后的字符串长度为(strlen(s)-1)+strlen(s)

    for(i=strlen(s),*(s+2*i-1)=0;i>0;--i)//(s+2*i-1)=0提前给插入后字符串末尾添0

    //按你的思路,最后一个字符*(s+i-1)移动到*(s+2*i-2),前一位插空格

    {

        *(s+2*i-2)=*(s+i-1);

        *(s+2*i-3)=' ';

    }

}

int main()

{

    char a[100];//这里定义大一点,否则请用malloc定义动态字符数组

    printf("请输入一个字符串(不超过20长度的字符串):\n");

    scanf("%s",a);

    fun(a);

    printf("新字符串是:\n");

    puts(a);

    return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-07-16
插入空格在字符串中是什么意思,具体的示例有没有。