我试图在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>
有关调试代码的任何帮助吗?
答案 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
。