关于 c:strtok 程序崩溃

strtok program crashing

在 http://www.opengroup.org/onlinepubs/000095399/functions/strtok.html 上给出的 strtok 程序
每次都崩溃..

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <string.h>
...
char *token;
char *line ="LINE TO BE SEPARATED";
char *search ="";

/* Token will point to"LINE". */
token = strtok(line, search);

/* Token will point to"TO". */
token = strtok(NULL, search);

如果我对变量"行"使用 char 数组,它可以工作。
即 char line[] ="LINE TO BE SEPARATED" 有效。

请解释一下。

相关讨论

  • 为什么这有一个 C++ 标签?它是纯 C 代码。 <string.h> 和 ::strtok() 甚至不存在于 C 中。 (它是 <cstring> 和 std::strtok()。)如果您想在 C 中执行此操作,请使用 std::string 和流(或任何提供标记化的库)。

strtok 修改输入字符串 line。

1
char *line ="LINE TO BE SEPARATED";

在这种情况下,line 指向只读内存。因此,无法修改。您需要为 strtok.

传递字符数组

相关讨论

  • 为什么 C 不强制 const char* 进行这种类型的初始化?另请注意 char line[] ="LINE TO BE SEPARATED"; 工作正常。
  • @NateS char line[] 是一个可修改的数组,最初只是初始化为包含字符串,这就是它起作用的原因。

n


n

相关讨论

  • 我在这里闻到了 std::copy 的味道…… 😉
  • 添加 #include <iostream> 并将 '
    ' 替换为 << std::endl
  • @Konrad:我可以猜到你在暗示什么,但是这个 std::copy 习语从来没有真正吸引过我。
  • @James:我添加了 <iostream>,但我看不出有理由为每个令牌刷新 std::cout 的缓冲区,所以我把它留在了 '
    '。
  • @sbi:嗯?一个语句代替了一个有四个语句的循环。诚然,它更长,但 C 在语法上的烂已经不是新闻了。让我看看我是否正确:copy(istream_iterator<string>(iss), istream_iterator<string>(), ostream_iterator<string>(cout,"
    "));。
  • @Konrad:我没有声称我不喜欢理性。 🙂

aJ 说需要什么。我的建议是避免丑陋


以上是关于 c:strtok 程序崩溃的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>