gpt4 book ai didi

c - strtok 影响输入缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 05:26:44 25 4
gpt4 key购买 nike

我正在使用 strtok 来标记字符串,strtok 会影响原始缓冲区吗?例如:

   *char buf[] = "This Is Start Of life";
char *pch = strtok(buf," ");
while(pch)
{
printf("%s \n", pch);
pch = strtok(NULL," ");
}*
printf("Orignal Buffer:: %s ",buf);

Output is::
This
Is
Start
Of
life
Original Buffer:: This

我读到 strtok 返回指向下一个标记的指针,那么 buf 是如何受到影响的?有没有办法保留原始缓冲区(没有额外的复制开销)?

后续问题::从目前的答案来看,我想没有办法保留缓冲区。那么,如果我使用动态数组创建原始缓冲区,并且如果 strtok 会影响它,那么在释放原始缓冲区时会发生内存泄漏,还是 strtok 负责释放内存?

最佳答案

strtok() 不会创建新字符串并返回它;它返回一个指向您作为参数传递给 strtok() 的字符串中的标记的指针。因此,原始字符串会受到影响。

strtok() 打断字符串意味着它将 delimiter 字符替换为 NULL 并返回指向该标记开头的指针。因此,在您运行 strtok() 之后,delim 字符将被 NULL 字符替换。你可以阅读link1 link2 .

正如您在 link2 示例输出中看到的那样,您得到的输出符合预期,因为 delim 字符被 strtok 替换>.

关于c - strtok 影响输入缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23192362/

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