关于 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 说需要什么。我的建议是避免丑陋


来源:https://www.codenong.com/2843236/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_8841.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?