【发布时间】:2014-02-07 09:14:23
【问题描述】:
我调用下面用 C 编写的函数来获取孩子的父母-
char *getParent(char *child)
{
int len = strlen(child);
char *parent;
parent = strdup(substring(child, 0, len - 4));
return parent;
}
char *substring(const char* str, int beg, int n)
{
char *ret = malloc(n+1);
strncpy(ret, (str + beg), n);
*(ret+n) = '\n';
return strdup(ret);
}
孩子是 - '11112222' 现在我期待输出 - '1111',但这个函数还在 1111 之后添加额外的空格,就像这个 '1111---这里我得到空间----'。 这个函数有什么问题?
【问题讨论】:
-
substring是您编写的函数还是库的一部分? -
@CyrilFougeray 不,
strlen()肯定不包括终止符,它不是字符串长度的一部分。strlen("")为 0。 -
*(ret+n) = '\n';确实添加了换行符。你需要加一个0:*(ret+n) = '\0'; -
抱歉,现在添加了有问题的子字符串函数。
-
*(ret+n) = '\n'应该是ret[n] = '\0',如果你已经在使用malloc,也不要使用strdup