为什么引入一个新的变量不可以

img


代码哪里有问题不能正常运行?为什么引入j不可以正常运行会出现乱码

因为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;
}

img

j没有初始化为0 啊
int i,j=0;