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

时间:2013-11-09 13:23:28

标签: c android-ndk c-strings

我正在使用C编写一个原生应用程序。在某个地方,我想做一个很简单的获取子字符串的工作,我已经为它编写了一个简单的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,但没有改变任何东西!

有人知道它是什么,我怎么能摆脱它?

2 个答案:

答案 0 :(得分:2)

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

您可能正在桌面上的调试模式下运行此命令,并且许多编译器 将调试模式中的新分配的内存清零(仅限)。

所需要的只是这一额外的一行:

alloc[len] = 0;

注意:您不需要/不应该在C:Do I cast the result of malloc?

中投射malloc

答案 1 :(得分:1)

原因是strncpy没有NULL终止目标字符串,所以你的代码应该如下所示。

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

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