简单的C子串实现

0 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;    
}    
Run Code Online (Sandbox Code Playgroud)

但是,当我有这个主要功能时:

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

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

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

isisa
<random characters>  
Run Code Online (Sandbox Code Playgroud)

有没有帮助调试代码?

iab*_*der 7

你应该null终止字符串.

*(ret+n) = '\n';
Run Code Online (Sandbox Code Playgroud)

应该

*(ret+n) = 0;
Run Code Online (Sandbox Code Playgroud)

注意:

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

beg+n < strlen(str)
Run Code Online (Sandbox Code Playgroud)

  • 确保`beg`实际上是_inside_字符串,或者你可以做一些像`substring("foo",10,10)这样会导致未定义的行为的东西也是一个好主意.`strncpy`能够应付很长的长度,所以不需要检查它. (4认同)