gpt4 book ai didi

c - Printf 只打印字符串中的第一个单词?

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

我注意到我的变量 input2 只打印字符串中的第一个单词,这导致程序的其余部分出现问题(即没有正确打印名词)。任何关于为什么会发生这种情况的见解将不胜感激。

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

char *input = strtok(argv[1], " \"\n");
//printf("%s\n", input);
int position;
int check = 0;
int first = 1;
while (input != NULL) {
position = binary_search(verbs, VERBS, input);
//printf("%s\n", input);
//printf("%d\n", position);
if (position != -1){
if (first){
printf("The verbs were:");
first = 0;
check = 1;
}
printf(" %s", input);
}
input = strtok(NULL, " ");
}
if (check == 1){
printf(".\n");
}
if (check == 0){
printf("There were no verbs!\n");
}

char *input2 = strtok(argv[1], " \"\n");
//printf("%s\n", input2);
int position2;
int check2 = 0;
int first2 = 1;

while (input2 != NULL) {
position2 = binary_search(nouns, NOUNS, input2);
//printf("%s\n", input2);
//printf("%d\n", position2);
if (position2 != -1){
if (first2){
printf("The nouns were:");
first2 = 0;
check2 = 1;
}
printf(" %s", input2);
}
input2 = strtok(NULL, " ");
}
if (check2 == 1){
printf(".\n");
}
if (check2 == 0){
printf("There were no nouns!\n");
}

return 0;
}

最佳答案

strtok() 修改您作为源传入的字符串,因此第二次使用 argv[1] 调用 strtok()不作用于 argv[1] 的原始值,而仅作用于第一个标记。

你可能想做这样的事情:

char* s = strdup(argv[1]);

并对字符串 s 进行操作 o argv[1] 将保持不变 - 您可以稍后再次处理它。但是,您需要在完成后释放重复字符串的内存。

关于c - Printf 只打印字符串中的第一个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16821451/

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