因为substr()函数里指针s1的下标变量j没有初始化,这个j的值为内存位置的默认值,使用此值可能会在其他内存位置写入数据而导致产生异常结果;
然后截取的字符串的结束位置也不对,结束条件应为i<=end,即复制到指定的结束下标位置后再停止复制,i<=end-begin可能会导致循环根本不能进入或者截取字符异常;
所以把j初始化为0,以及更改substr()函数里的for循环的结束条件为i<=end即可。
测试代码如下:
参考链接:
#include <fstream>
#include <iostream>
using namespace std;
void substr(char *s,int begin,int end,char * s1){
int i,j=0; // j初始化为0,从字符数组s1下标为0开始存储复制的字符
for(i=begin;i<=end;i++){ // 复制从下标begin与end之间的字符到s1数组中
s1[j]=s[i];
j++;
}
s1[j]='\0';
}
int main(void){
char s[100],s1[100];
int begin,end;
cout<<"请输入一个字符串:";
// https://blog.csdn.net/qq_36770641/article/details/88552618
cin.getline(s,100);
cout<<"请输入要截取的起始和结束下标:";
cin>>begin>>end;
substr(s,begin,end,s1);
cout<<"截取的字符串为:"<<s1;
return 0;
}
j没有初始化为0 啊
int i,j=0;