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);
}