0

我正在使用 C 为 android 编写本机应用程序。在某个地方,我想做一个简单的获取子字符串的旧工作,为此我编写了一个简单的 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 输出的屏幕截图: 在此处输入图像描述

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

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

4

2 回答 2

2

既不alloc也不strncpy将新分配的内存清零。您需要在新字符串的末尾手动添加一个零。

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

它所需要的只是这一行:

alloc[len] = 0;

注意:您不需要/不应该在 C 中转换 malloc:我是否转换 malloc 的结果?

于 2013-11-09T13:54:12.860 回答
1

原因是 strncpy 不会 NULL 终止目标字符串,因此您的代码应如下所示。

strncpy(alloc, src+start, len);
alloc[len]='\0' ;

这应该可以解决您的问题。

于 2013-11-09T13:57:41.813 回答