如何实现一个子字符串函数,例如以下返回子字符串但不在malloc()
进程中使用的函数,因此我不必担心使用该free()
函数在代码中的其他地方释放关联的内存。这甚至可能吗?
const char *substring(const char *string, int position, int length)
{
char *pointer;
int c;
pointer = malloc(length+1);
if (pointer == NULL)
{
printf("Unable to allocate memory.\n");
exit(EXIT_FAILURE);
}
for (c = 0 ; c < position -1 ; c++)
string++;
for (c = 0 ; c < length ; c++)
{
*(pointer+c) = *string;
string++;
}
*(pointer+c) = '\0';
return substr;
}
更新:2012 年 12 月 30 日
考虑了所有答案和评论后,很明显,基本上我想要做的是创建一个动态大小的数组(即子字符串),并且在 C 中如果没有在某个地方必须使用某种malloc()
函数和一个随后free()
调用子字符串指针或没有垃圾收集器的帮助。我尝试按照libgc
@elhadi 的建议集成垃圾收集器,但到目前为止还不能让它在我的 Xcode 项目中工作。所以我选择坚持使用下面的代码malloc()
和free()
.
char * subStr(const char* srcString, const int offset, const int len)
{
char * sub = (char*)malloc(len+1);
memcpy(sub, srcString + offset, len);
sub[len] = 0;
return sub;
}
int main()
{
const char * message = "hello universe";
char * sub = subStr( message, 6, 8 );
printf( "substring: [%s]", sub );
free(sub);
}