【发布时间】:2021-12-20 16:52:31
【问题描述】:
我写了一个子字符串函数,它接受一个值 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└
一切正常,得到我想要的准确输出,但在输出值的末尾,它还返回一个意外的值,例如符号和随机字母不知道如何摆脱它 **注意我不想使用字符串或其他任何东西,只是想解决这个程序中的问题
【问题讨论】:
-
C 字符串以 null 结尾。您忽略了这一点,这就是为什么建议不要使用 C 字符串的原因。您还尝试仅使用指针返回数组。一般来说,这不会有好的结局。
-
你的 while 循环看起来也很糟糕。为什么要检查你是否从正确的地方开始?为什么不在正确的地方开始?也许在进入循环之前做一些基本的边界检查,并可能访问你没有业务的内存。使用有意义的变量名,使代码更易于阅读。并将正确的格式设置为顶部的樱桃。
-
我建议 std::string
-
这能回答你的问题吗? Why is a null terminator necessary?
标签: c++ arrays function pointers