|
发表于 2022-10-11 21:09:13
|
显示全部楼层
本楼为最佳答案
有
【问题】:
1、char sa[] ; // 没有定义足够的储存空间,必须声明数组的大小
2、sa 是函数的局部变量,在函数调用结束的时候,其占用空间会立即释放,在主程序中根本就无法得到复制的字符串。
可以这样改:
- #include <stdio.h>
- #include <stdlib.h>
- char * mid(const char sb[] , const int a , const int b)
- {
- int i , j ;
- char * sa ;
- sa = (char *) malloc(b - a + 2) ;
- for(i = 0 ; sb[i] && i < a ; i ++) ;
- for(j = 0 ; sb[i] && i < b + 1 ;) sa[j ++] = sb[i ++] ;
- sa[j] = '\0' ;
- return sa ;
- }
- int main(void)
- {
- char * str1 , str2[256] ;
- int i , j ;
- scanf("%s%d%d" , str2 , & i , & j) ;
- str1 = mid(str2,i,j) ;
- printf(str1) ;
- free(str1) ;
- }
复制代码
编译、运行实况:
- D:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- ABCDEFGHIJKLMNOPQRSTUVWXYZ 10 20
- KLMNOPQRSTU
- D:\[00.Exerciese.2022]\C>
复制代码
|
|