gpt4 book ai didi

c - 为什么 strtok 与 scanf 会这样交互?

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

所以我的 shell 项目一直在进行中,但我最新的 speedbump 是引入用户输入。我正在尝试标记输入字符串,但在第一个标记之后 strtok 仅返回 NULL。但如果我在程序中硬写字符串,一切都会完美无缺。我如何处理用户输入,以便 strtok 标记整个字符串(而不是第一个)?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ()
{
char input[100];
scanf("%s", input); //input entered is "echo 1 2 3 4"
char *temp=strtok(input, " "); //this is "echo"
printf("temp1: %s\n", temp);
temp=strtok(NULL, " "); //this is (null)
printf("temp2: %s\n", temp);

}

最佳答案

问题出在scanf("%s"...)它在第一个空白字符处停止读取并返回字符串。换句话说,scanf("%s"...)不会多读一个字。

请参阅“%s”下的此处:http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

scanf("%[^\n\r]", string_variable)可能是个更好的主意。

更新:正如 Seth 在评论中提到的,"%[^\n\r]"表示读取所有字符,直到 ^ 之后的任何字符为止遇到了。

关于c - 为什么 strtok 与 scanf 会这样交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459490/

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