#include "stdio.h" #include "string.h" #include "stdlib.h" char fun(char *p,int m,char *o) { int p1=strlen(p); char *pp; pp=malloc((p1-m)*sizeof(char)); *pp=*p; p=strcat(pp,o); return *p; } int main() { char *p,*o; int m; printf("please enter p string:"); scanf("%s",p); printf("\nplease enter o string:"); scanf("%s",o); printf("\nm="); scanf("%d",&m); *p=fun(p,m,o); puts(p); return 0; }程序哪里有问题
时间: 2024-01-29 17:02:08 浏览: 305
这个程序有几个问题:
1. 在输入 p 和 o 字符串之前,需要为指针变量 p 和 o 分配内存空间,否则会出现未定义的行为。
2. 函数 fun 的返回值类型为 char,但实际上返回的是字符串指针 p,这样会导致编译器给出警告或错误。
3. 在函数 fun 中,pp 指向的内存空间没有被释放,会导致内存泄漏。
下面是修改后的程序:
```
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *fun(char *p, int m, char *o) {
int p1 = strlen(p);
char *pp = malloc((p1-m+1) * sizeof(char)); // 加1是为了存放字符串结束符'\0'
strncpy(pp, p, m); // 复制p的前m个字符到pp中
strcat(pp, o); // 将o字符串拼接到pp后面
return pp;
}
int main() {
char *p = malloc(100 * sizeof(char));
char *o = malloc(100 * sizeof(char));
int m;
printf("please enter p string:");
scanf("%s", p);
printf("\nplease enter o string:");
scanf("%s", o);
printf("\nm=");
scanf("%d", &m);
char *result = fun(p, m, o);
puts(result);
free(result);
free(p);
free(o);
return 0;
}
```
修改后的程序中,为 p 和 o 分配了 100 字节的空间,可以根据实际情况调整空间大小。在函数 fun 中,使用 strncpy 复制 p 的前 m 个字符到 pp 中,然后使用 strcat 将 o 字符串拼接到 pp 后面,并返回 pp 指针,pp 指向的内存空间需要在 main 函数中释放。
阅读全文