只是为了它的乐趣我正在编写一个程序,它将获取用户输入的字符串(或者甚至是文本文档)并对字符串中的单词进行加扰。
我正在尝试使用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
是正确的方法。
答案 0 :(得分:2)
如果您的字符串是按照您的免费建议进行的。然后你不需要将它复制到一个新的缓冲区(btw 1个字符太短)。使用您提供的缓冲区。
如果const char *
给你,你只需要复制它,即你不允许修改缓冲区的内容。
使用strtok_r
也更好,因为常规strtok
不可重入。
答案 1 :(得分:0)
您可以使用scanf()
代替getstr()
和strtok()
char word[100];
while(scanf(" %s",word)!=EOF) {
// use the word string here
}
用户应使用
停止输入字符EOF = CTRL + D (对于Linux)
EOF = CTRL + Z (适用于Windows)