4.下列给定程序中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每 复制三个字符之后插入一个空格。 例如,若给a输入字符串:ABCDEFGKHIJK,调用函数后,字符数组b中的内容为:ABC DEF GHI JK。 请改正程序中的错误,使它能得出正确结果。 #include <stdio.h> void fun(char *p, char *b) { int i, k=0; while(*p) { i=1; while( i<=3 && *p ) { /**********found**********/ b[k]=p; k++; p++; i++; } if(*p) { /**********found**********/ b[k++]=" "; } } b[k]='\0'; } main() { char a[80],b[80]; printf("Enter a string: printf("The original string: "); fun(a,b); printf("\nThe string after insert space: } "); gets(a); puts(a);
时间: 2023-07-01 08:09:50 浏览: 328
程序中存在多处错误,需要进行如下修改:
1. 在函数fun的第9行,应该将b[k]赋值为*p,而不是赋值为p。因为p是指针变量,需要用*运算符取出指针所指向的值。
2. 在函数fun的第12行,应该将b[k++]赋值为' ',而不是赋值为" "。因为' '是字符型常量,而" "是字符串常量,两者类型不同。
3. 在函数fun的最后一行,应该将b[k]赋值为'\0',而不是赋值为""。因为'\0'表示字符串的结束符,而""是空字符串,两者类型不同。
4. 在主函数main中,应该在调用函数fun之前先输出原始字符串a,否则无法确认函数fun是否正确。
修改后的程序如下所示:
```c
#include <stdio.h>
void fun(char *p, char *b) {
int i, k=0;
while(*p) {
i=1;
while( i<=3 && *p ) {
b[k]=*p;
k++;
p++;
i++;
}
if(*p) {
b[k++]=' ';
}
}
b[k]='\0';
}
int main() {
char a[80],b[80];
printf("Enter a string: ");
gets(a);
printf("The original string: %s\n", a);
fun(a,b);
printf("The string after insert space: %s\n", b);
return 0;
}
```
阅读全文