简单的C子串实现

时间:2012-10-27 05:09:52

标签: c string pointers substring

我试图在C中实现子字符串函数。这是我到目前为止所拥有的:

char *substring(const char* str, int beg, int n)
{
   char *ret = malloc(n+1); 
   strncpy(ret, (str + beg), n);
   *(ret+n) = '\n';

   return ret;    
}    

然而,当我有这个主要功能时:

int main()
{
   char *a = "thisisalongstring";
   char *c;

   c = substring(a, 2, 5);
   printf("%s", c);

   return 0;
}

输出结果为:

isisa
<random characters>  

有关调试代码的任何帮助吗?

2 个答案:

答案 0 :(得分:7)

你应该null终止字符串。

*(ret+n) = '\n';

应该是

*(ret+n) = 0;

注意:

您还应该确保子字符串不超过字符串大小:

beg+n < strlen(str)

答案 1 :(得分:0)

我想你也应该检查一下

str != NULL

n > 0

也可能是beg。此外,您可以在beg为负数时从最后开始计算。

例如,对于char *a = "thisisalongstring";substring( a, -1, 1 )表示字符串中的最后一个字符,即g