我正在用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输出的屏幕截图:

我尝试了填充更多的零,2甚至3,但没有改变任何东西!
有人知道它是什么吗?我怎样才能摆脱它?
发布于 2013-11-09 13:54:12
alloc和strncpy都不会将新分配的内存清零。您需要在新字符串的末尾手动添加一个零。
可能您是在桌面上以Debug模式运行这个程序,而且很多编译器在调试模式(仅)中执行零输出新分配的内存。
它所需要的只是这条额外的行:
alloc[len] = 0;注意:您不需要/不应该在C:Do I cast the result of malloc?中强制转换malloc。
发布于 2013-11-09 13:57:41
原因是strncpy不为空,终止目标字符串,所以代码应该如下所示。
strncpy(alloc, src+start, len);
alloc[len]='\0' ;这应该能解决你的问题。
https://stackoverflow.com/questions/19876456
复制相似问题