为什么strsep段错误

时间:2012-08-12 12:36:37

标签: strsep

#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输出如下:

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

该计划出了什么问题?

1 个答案:

答案 0 :(得分:3)

  

如果我不使用strdup。分配“char * bp = buf”。然后是上面的   程序将分段错误。

它可能需要buf指向无法合法写入的内存,在这种情况下是字符串文字。如果您使用strdup,您将写入您自己的可写副本。