【问题标题】:Tokenize whitespace character(s) in C在 C 中标记空白字符
【发布时间】:2010-11-14 23:08:44
【问题描述】:

我正在尝试用多个空格标记一个字符串。例如,"yes___no",其中下划线是空格。使用strtok(string, " ");

但是我遇到了一个 seg 错误,调试后我看到在我标记第二个字符串后是 "\024\002" 并且在打印这个不正确的字符串时我得到了我的错误。

【问题讨论】:

  • 也许您可以添加更多代码?应该是这样的: for (t = strtok(string, " "); t; t = strtok(NULL, " ")){ /*do something with t */ }
  • 看这个例子:ideone.com/phSOJ

标签: c tokenize strtok


【解决方案1】:

您不能更改字符串文字。

/* does not work */
char *data = "yes no";
strtok(data, " ");

上面的strtok 将尝试通过在该空间写入'\0' 来打破datadata[3] = '\0';,但字符串文字不可修改。试试吧

/* works */
char data[] = "yes no";
strtok(data, " ");

编辑:将字符串复制到字符数组中

char *data = "string literal";
/* ... */
char *copy;
size_t datalen = strlen(data) + 1;
copy = malloc(datalen);
if (copy != NULL) {
    strcpy(copy, data);
    /* use copy now ... strtok(copy, " "); ... or whatever you need */
    free(copy);
} else {
    /* no memory. Tell user to upgrade computer :-) */
}

【讨论】:

  • 那么我将如何拆分 (char *),因为这是我将字符串转换为令牌的方式。
  • 嗯......只需将字符串文字复制到字符数组(或分配的内存)。见编辑
猜你喜欢
  • 2014-10-26
  • 2014-07-16
  • 1970-01-01
  • 2010-09-20
  • 2011-05-31
  • 1970-01-01
  • 2013-09-11
相关资源
最近更新 更多