首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么会出现strsep段故障

为什么会出现strsep段故障
EN

Stack Overflow用户
提问于 2012-08-12 20:36:37
回答 1查看 2.1K关注 0票数 2
代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
  char *buf = "2012/9/8";
  char sep[] = "/";
  char *token;
//  char *bp = strdup(buf);
  char *bp = buf;
  while ((token = strsep(&bp,sep))) {
    printf("tok = `%s'\n", token);
  }
  free(bp);
  return 0;
}

如果我不使用strdup。分配"char *bp = buf“。然后,上面的程序将分割故障。gdb输出如下:

代码语言:javascript
复制
Program terminated with signal 11, Segmentation fault.
#0  0x00007fcc949c13b5 in strsep () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) bt
#0  0x00007fcc949c13b5 in strsep () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00000000004005d5 in main () at str_split.c:11

程序出了什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-12 20:39:00

如果我不使用strdup,则使用

。分配"char *bp = buf“。然后,上面的程序将分割故障。

它可能必须使用buf指向不能合法写入的内存,在本例中是字符串文字。如果您使用strdup,您将写入您自己的可写副本。

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

https://stackoverflow.com/questions/11922222

复制
相关文章

相似问题

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