gpt4 book ai didi

C - 获取字符串前 n 个字符后的子字符串

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

事实证明,这出乎意料地难以做到,而且我还没有通过现有问题找到一个直接的解决方案。我查看了几个重复的问题,但它们不是我要找的。

我试过类似的方法,但我显然误解了 strncpy 是如何实现的作品。我想在字符串的前 14 个字符之后获取所有文本。

int length = sizeof(str) - 14;
strncpy(substr, str+14, length);

最简单的方法是什么?

最佳答案

您是否误解了数学的原理? 10 - 14 = -4

编辑:

有一个

char str[10];
int length = sizeof(str) - 14;

转入原帖。 (查看修改)

此外,您不应使用 sizeof 来计算字符串的长度,而应使用 strlen()sizeof 运算符用于找出类型的大小,假设 str 是数组或指针 sizeof 将返回元素的数量在第一种情况下,指针的大小等于 sizeof(void *) 在第二种情况下。

字符串是一个数组,但数组的大小不是字符串的长度,10个字符的字符串可以存储到100个元素的数组中,所以问题不是strncpy(你应该避免顺便说一句,因为它不能保证 nul 终止),真正的问题是你如何处理它。

假设你有一个长度≥14的有效字符串,那么

strcpy(substr, str + 14)

应该够了!

你应该确保目标数组substr当然足够大并且str的长度大于或等于14或者,在这两种情况中的任何一种情况下,您都会调用未定义的行为。

如果你之前知道str的长度那么,你可以试试

memcpy(substr, str + 14, length_str - 14);
substr[length_str - 14] = '\0';

请注意,substr 必须至少有 length_str - 14 个元素 +1 作为 nul 终止符,而且如果您知道有str 中的 '\0' 终止符,然后是

// Leaving + 1 explicitly to denote the '\0'
memcpy(substr, str + 14, length_str - 14 + 1);

应该在一次调用中复制它。

关于C - 获取字符串前 n 个字符后的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42146212/

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