我正在学习C编程语言,我试图创建一个函数,它使一个子字符串,然后返回它。 我发现这个代码here:C:子字符串函数返回
void substring(char s[], char sub[], int p, int l) {
int c = 0;
while (c < l) {
sub[c] = s[p+c-1];
c++;
}
sub[c] = '\0';
}
我想在参数摆脱char sub[]
的,而是返回函数的内部创建一个字符串。 这是最接近我认为我得到的,但我总是得到一个分段错误(核心转储)运行时错误。
char substring(char s[], int p, int l) {
int c = 0;
char sub[1000];
while (c < l) {
sub[c] = s[p+c-1];
c++;
}
sub[c] = '\0';
return *sub;
}
感谢所有帮助
您不能返回本地一*声明的字符串 - 它一旦函数结束时消失。这就是为什么原始代码使用第二个指针。如果你想返回持久化内存,使用'malloc'。 – usr2564301
对于性能和内存负载的原因,我会尽可能使用原始字符串。在你的情况下,我只是返回这个子字符串的指针,它简化了所有'char * SubString = s + p;'其中p是开始位置。如果你以后真的需要拷贝,我不会重新发明轮子,并使用像memcpy(MySubStringCopy,SubString,l)这样的预定义方法;'Variable MySubStringCopy'可以在本地堆栈分配或堆分配。 – bkausbk