#include<stdio.h> int fun(char *a,char *b,int m); int main(void) { int m,i; char a[100]= {0}; char b[100]= {0}; printf("input a string:"); gets(a); printf("input m:"); scanf("%d",&m); for(i=0; b[i]!='\0'; i++) { printf("%d",b[i]); } return 0; } int fun(char *a,char *b,int m) { int i,j; j=m-1; for(i=0; a[j]!='\0'; i++) { b[i]=a[j]; j++; } }检查程序
时间: 2024-01-07 08:04:43 浏览: 66
程序中存在以下问题:
1. 函数 fun 没有返回值,应该声明为 int 类型,并在函数末尾添加 return 语句。
2. 函数 fun 中的参数 b 没有初始化,应该在调用函数前先将其初始化。
3. 在主函数中输出字符数组 b 的内容时,应该使用循环遍历字符数组 b,而不是字符数组 a。
4. gets 函数存在缓冲区溢出的风险,应该使用更安全的字符串输入函数,如 fgets。
修改后的程序如下:
```c
#include <stdio.h>
int fun(char *a, char *b, int m);
int main(void) {
int m, i;
char a[100] = {0};
char b[100] = {0};
printf("input a string:");
fgets(a, 100, stdin); // 使用 fgets 进行字符串输入
printf("input m:");
scanf("%d", &m);
fun(a, b, m); // 调用函数 fun
for (i = 0; b[i] != '\0'; i++) { // 遍历字符数组 b
printf("%c", b[i]);
}
return 0;
}
int fun(char *a, char *b, int m) {
int i, j;
j = m - 1;
for (i = 0; a[j] != '\0'; i++) {
b[i] = a[j];
j++;
}
return i; // 返回字符数组 b 的长度
}
```
阅读全文