C在修剪中添加额外的空格

时间:2014-02-07 09:14:24

标签: c substring

我调用下面用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 ---这里我得到空间----'。 这个功能出了什么问题?

1 个答案:

答案 0 :(得分:3)

此:

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

错了,应该是:

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

终止字符串。您正在添加换行符,而不是终结符,因此无法生成有效的字符串。

另外,我建议更喜欢索引,因为它在语法上更清晰:

ret[n] = '\0';

当然,您应该在依赖它之前检查malloc()的返回值。

更新:天哪,删除strdup(),现在已经malloc()编辑了新字符串,这完全没有意义。

应该只是:

char * substring(const char *str, size_t beg, size_t n)
{
    char *ret = malloc(n + 1);
    if(ret != NULL)
    {
        strncpy(ret, str + beg, n);
        ret[n] = '\0';
    }
    return ret;
}

这仍假设偏移量和长度有效,str为非NULL