首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用strrchr()时出现分段错误

使用strrchr()时出现分段错误
EN

Stack Overflow用户
提问于 2016-02-27 01:36:18
回答 1查看 387关注 0票数 0

我正在尝试从记录中删除最后一个逗号。我使用strrchr()查找记录中',‘的最后一个匹配项,并将其设置为空终止。由于某种原因,它没有找到逗号的最后一个匹配项,并给出了一个“分段错误11”错误。

代码语言:javascript
复制
void buildAssemblyRecord(char asmRecord[], const char* data)
{
char* record = asmRecord;
record += sprintf(record, "dc.b\t");

int i = 0;
for(i = 0; i < strlen(data); i++)
{
    record += sprintf(record, "$%.2X, ", data[i]);
}

//Remove trailing comma
char* whereComma = strrchr(record, ',');
if(whereComma != NULL)
{
    *whereComma = '\0';
}
}

从理论上讲,这应该可以很好地工作,因为我一直使用这种方法和常规的旧strchr从fgets输入中删除新行字符。

有人能告诉我发生了什么事吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-27 01:45:25

如果你阅读this sprintf (and family) reference,你会发现它返回了它所写的字符串的长度。

当您执行record += sprintf(...)时,您将使record指向新打印的字符串之外。这对你的循环有好处。但是,当您在strrchr调用中直接使用record时,strrchr无法找到您要查找的字符,并将返回您没有检查过的NULL。因此,当你取消引用whereComma时,你将取消引用一个空指针,并且会有未定义的行为和崩溃。

您需要在循环后重置指针:

代码语言:javascript
复制
record = asmRecord;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35658209

复制
相关文章

相似问题

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