gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:08 24 4
gpt4 key购买 nike

我调用下面用 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);
}

child 是 - '11112222'现在我期待输出 - '1111',但此函数还在 1111 之后添加额外的空格,例如 '1111--- 这里我得到空格----'。这个函数有什么问题?

最佳答案

这个:

*(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

关于C 在修剪中添加额外的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21623621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com