gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:07:32 24 4
gpt4 key购买 nike

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

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[] = "\r\n";,或 char s* = "\r\n"。这样第二个标记将不包含任何换行符。另请注意,如果未找到标记,strtok() 会返回一个 NULL 指针,因此下面的代码会在打印读取的标记之前对此进行测试。

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

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

#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;
}

关于c - 如何获取输入的第二个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41710458/

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