如何获取输入的第二个字符串

#include  #include  int main(void) { char command[256]; char *token; const char s[2] = " "; fprintf(stdout, "$ Please enter a command \n"); fflush( stdout ); fgets ( command, 256, stdin ); token = strtok(command, s); if (strcmp(token, "loaddungeon") == 0){ fprintf(stdout, "$ loaded successfully \n"); fflush( stdout ); } } 

我试图使用strtok获取输入的第二个字符串。 例如,如果输入是“ loaddungeon dfile.txt ”,我想要的是“ dfile.txt ”。 我的函数能够得到字符串“ loaddungeon ”。 但我不知道如何获得第二个字符串“ dfile.txt ”。 谁能告诉我怎么做?

(考虑输入始终是“ loaddungeon dfile.txt ”。)

要读取第二个字符串,需要将NULL传递给strtok() 。 请记住, fgets()保留输入行中的换行符,因此您应该从char s[2] = " ";更改分隔符定义char s[2] = " "; to char s[] = " \r\n"; 或者char s* = " \r\n" 。 这样,第二个令牌将不包含任何换行符。 另请注意,如果未找到令牌, strtok()将返回NULL指针,因此下面的代码在打印读取令牌之前对此进行测试。

但是,既然你说只有两个字符串,我会考虑只使用sscanf() 。 使用%s转换说明符, sscanf()会将字符读入字符串,直到遇到空白字符,但不会在字符串中包含此空格字符。 在scanf()类型函数中使用%s说明符时,应指定最大字段宽度以避免缓冲区溢出。 此最大宽度应小于缓冲区的大小,以便为'\0'字符串终止符留出空间,在这种情况下为255sscanf()函数返回成功分配的次数,在这种情况下应为2 。 下面显示的sscanf()方法(已注释掉)在打印字符串之前检查此返回值。

 #include  #include  #include  #define BUFFER_MAX 256 int main(void) { char command[BUFFER_MAX]; char *token1 = NULL; char *token2 = NULL; const char *s = " \r\n"; fprintf(stdout, "$ Please enter a command \n"); fflush( stdout ); fgets ( command, BUFFER_MAX, stdin ); token1 = strtok(command, s); token2 = strtok(NULL, s); if (token1 && token2 && strcmp(token1, "loaddungeon") == 0) { fprintf(stdout, "$ loaded successfully: %s\n", token2); fflush( stdout ); } /* or instead do this */ /* char word1[BUFFER_MAX], word2[BUFFER_MAX]; if (sscanf(command, "%255s %255s", word1, word2) == 2) { if (strcmp(word1, "loaddungeon") == 0){ fprintf(stdout, "$ loaded successfully: %s\n", word2); fflush( stdout ); } } */ return 0; } 

每次调用strtok都会返回指向给定字符串中找到的最后一个标记的指针(如果没有,则返回null)。 要使用空格作为分隔符检索第二个标记,您需要第二次调用strtok

 int main() { char command[256]; char *token1 = NULL; char *token2 = NULL; const char s[2] = " "; fprintf(stdout, "$ Please enter a command \n"); fflush(stdout); fgets(command, 256, stdin); token1 = strtok(command, s); // now points to first word if (NULL != token1) { token2 = strtok(NULL, s); // now points to second word } if (NULL != token2) { if (strcmp(token2, "loaddungeon") == 0){ fprintf(stdout, "$ loaded successfully \n"); fflush(stdout); } } }