gpt4 book ai didi

c - 字符串末尾的奇怪字符 (0010)

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

我正在使用 C 为 android 编写一个 native 应用程序。我想在某个地方做一个简单的获取子字符串的旧工作,我已经为它编写了一个简单的 C 代码。这是代码:

char* get_part_allocated(const char* src, int start, int len)
{
LOGI("copying [%s] from [%d] len [%d]\n", src, start, len);
int nlen = len+1;
char* alloc = (char*)malloc(nlen*sizeof(char));
strncpy(alloc, src+start, len);
LOGI("result is: [%s]\n", alloc);
return alloc;
}

当我在 PC 上编译和运行这段代码时,我得到了预期的结果,但是当我在 android 上运行它时,它的末尾总是有一个奇怪的字符,这会破坏我的程序流程并导致错误!

这是 logcat 输出的屏幕截图: enter image description here

我尝试填充更多 NULL,2 个甚至 3 个,但没有任何改变!

有人知道它是什么吗?我该如何摆脱它?

最佳答案

allocstrncpy 都不会将新分配的内存清零。您需要在新字符串的末尾手动添加一个零。

可能您在桌面上以 Debug模式运行它,并且许多编译器确实在 Debug模式下(仅)将新分配的内存清零。

它所需要的只是这一行:

alloc[len] = 0;

注意:你不需要/不应该在 C: Do I cast the result of malloc? 中使用 malloc

关于c - 字符串末尾的奇怪字符 (0010),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19876456/

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