首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符串末尾的奇怪字符(0010)

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

Stack Overflow用户
提问于 2013-11-09 13:23:27
回答 2查看 573关注 0票数 0

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

代码语言:javascript
运行
复制
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,但没有改变任何东西!

有人知道它是什么吗?我怎样才能摆脱它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-09 13:54:12

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

可能您是在桌面上以Debug模式运行这个程序,而且很多编译器在调试模式(仅)中执行零输出新分配的内存。

它所需要的只是这条额外的行:

代码语言:javascript
运行
复制
alloc[len] = 0;

注意:您不需要/不应该在C:Do I cast the result of malloc?中强制转换malloc。

票数 2
EN

Stack Overflow用户

发布于 2013-11-09 13:57:41

原因是strncpy不为空,终止目标字符串,所以代码应该如下所示。

代码语言:javascript
运行
复制
strncpy(alloc, src+start, len);
alloc[len]='\0' ;

这应该能解决你的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19876456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档