为什么函数返回包括实际输出在内的垃圾值,以及如何清除这些垃圾



我编写了一个子字符串函数,它采用值char数组、初始值和长度,然后返回一个子字符串

char* substring(char t[],int i,int l){
int k=0;
char* subs=new char[l];
while(t[k]!=0){
if(k==i){
int a=i;
int j=0;
// for (int j=0;j<l;j++)
while(j<l)
{
subs[j]=t[a];
a++;
j++;
}
if(subs!=0){
break;
}
}
k++;

}
return subs;
}

// CHECKING
int main(){
char t[20]="this is a string";
cout<<substring(t,0,4);
}
//OUTPUT 
this└

一切都正常工作,得到了我想要的确切输出,但在输出值的末尾,它还返回了一个意外的值,比如符号和随机字母。不知道如何消除它**注意:我不想使用字符串或其他任何东西,只想清除这个程序中的问题

这是修复函数的最小更改——更改分配大小并终止子字符串。您可能需要考虑外循环是否值得——如果子字符串在字符串结束后开始,您不应该返回一个空字符串而不是一个未初始化的字符串吗?还是应该返回一个null来表示错误?这是一个风格问题,但内部循环可能更容易理解为:CCD_ 1。

char* substring(char t[], int i, int l)
{
int k = 0;
char* subs = new char[l + 1];
while (t[k] != 0) {
if (k == i) {
int a = i;
int j = 0;
// for (int j=0;j<l;j++)
while (j < l) {
subs[j] = t[a];
a++;
j++;
}
subs[j] = '';
break;
}
k++;
}
return subs;
}
// CHECKING
int main()
{
char t[20] = "this is a string";
cout << substring(t, 0, 4);
}

最新更新