gpt4 book ai didi

C 的 strtok() 和只读字符串文字

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:00 29 4
gpt4 key购买 nike

char *strtok(char *s1, const char *s2)

repeated calls to this function break string s1 into "tokens"--that is the string is broken into substrings, each terminating with a '\0', where the '\0' replaces any characters contained in string s2. The first call uses the string to be tokenized as s1; subsequent calls use NULL as the first argument. A pointer to the beginning of the current token is returned; NULL is returned if there are no more tokens.

你好,

我刚才一直在尝试使用 strtok,发现如果我将 char* 传递给 s1,我会得到一个分段故障。如果我传入 char[]strtok 可以正常工作。

这是为什么?

我用谷歌搜索了一下,原因似乎与 char* 是只读的而 char[] 是可写的有关。更详尽的解释将不胜感激。

最佳答案

您将 char * 初始化为什么?

如果是这样

char *text = "foobar";

然后你有一个指向一些只读字符的指针

为了

char text[7] = "foobar";

然后你就有了一个七元素的字符数组,你可以用它来做你喜欢的事情。

strtok 写入您提供的字符串 - 用 null 覆盖分隔符并保留指向字符串其余部分的指针。

因此,如果您向它传递一个只读字符串,它会尝试写入它,并且您会得到一个段错误。

此外,因为 strtok 保留对字符串其余部分的引用,所以它不可重入 - 您一次只能在一个字符串上使用它。最好避免,真的 - 考虑使用 strsep(3) - 例如,参见此处:http://www.rt.com/man/strsep.3.html (尽管它仍然写入字符串,因此具有相同的只读/段错误问题)

关于C 的 strtok() 和只读字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52345898/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com