gpt4 book ai didi

strtok 的更清晰的实现

转载 作者:行者123 更新时间:2023-11-30 14:21:23 27 4
gpt4 key购买 nike

只是为了好玩,我正在编写一个程序,它将接受用户输入的字符串(甚至可能是文本文档)并打乱字符串中的单词。

我正在尝试使用 strtok 函数来分隔字符串中的每个单词。目前我觉得我当前的 strtok 实现很草率:

int main(int argc, char *argv[])
{
char *string, *word;

if(!(string = getstr())) //function I wrote to retrieve a string
{
fputs("Error.\n", stderr);
exit(1);
}
char array[strlen(string) + 1]; //declare an array sized to the length of the string
strcpy(array, string); //copy the string into the array
free(string);
if(word = strtok(array, " "))
{
//later I'll just write each word into a matrix, not important right now.
while(word = strtok(NULL, " "))
{
//later I'll just write each word into a matrix, not important right now.
}
}
return 0;
}

我觉得必须有一种更简洁的方法来实现 strtok ,而无需在程序中途声明数组。我只是觉得不正确。使用 strtok 是解决此问题的正确方法吗?我宁愿不使用固定大小的数组,因为我喜欢一切都是动态的,这就是为什么我开始怀疑使用 strtok 是否是正确的方法。

最佳答案

如果您的字符串按照您的 free.txt 文件的建议进行了 malloc。然后你不需要将它复制到新的缓冲区中(顺便说一句,这 1 个字符太短了)。使用为您提供的缓冲区。

如果它是由 const char * 提供给您的,则只需复制它,即您不允许修改缓冲区的内容。

最好使用 strtok_r,因为常规 strtok 不可重入。

关于strtok 的更清晰的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14776606/

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