0

我正在尝试在 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>  

任何帮助调试代码?

4

2 回答 2

7

你应该空终止字符串。

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

应该

*(ret+n) = 0;

笔记:

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

beg+n < strlen(str)
于 2012-10-27T05:12:07.247 回答
0

我想你也应该检查一下

str != NULL

n > 0

可能也是beg应该检查的。beg当是负数时,您也可以从末尾开始计数。

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

于 2012-10-27T06:19:59.830 回答