【问题标题】:How to extract the string after a word in C如何在C中提取单词后的字符串
【发布时间】:2021-03-30 12:32:29
【问题描述】:

我正在尝试在我的程序中添加一个功能,该功能可以在 C 中的特定单词之后获取特定单词或句子。

例如 当我尝试输入: “say Hello World”,程序只会打印“Hello World”。

我的代码是这样运行的:

int main(){
    char command;
    do{
        printf("MyOS>");
        scanf("%s", &command);
        if(strncmp(&command, "say", 3) == 0){
            //enter code here
        }
        } while (strncmp(&command, "exit", 4));
    return 0;
}

运行时,程序要求输入字符串,如果我的字符串以“say”开头,我希望它输出下一个单词/字符串。

【问题讨论】:

  • 您不能像char command; 一样将字符串存储到单个char 中。那是U.B.字符数组会更合适。
  • 唯一的打印是printf("MyOS>");。贴出真实代码。

标签: c string string-matching


【解决方案1】:

你有两个问题

  1. scanf("%s", &command); 这里的变量 command 需要一个大于 1 的缓冲区。

如下使用
#define COMMAND_SIZE 1024 并声明类似char command[COMMAND_SIZE] = {0}的东西

  1. 我认为您正在尝试读取多字字符串,即使命令有足够的大小,您使用 scanf("%s", command); 的方式也是不可能的。

最好使用fgets(command, sizeof(command), stdin); 读取多字字符串。

简而言之,您需要这样的东西:

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

#define COMMAND_SIZE 512

int main(){
    
    char command[COMMAND_SIZE] = {0};
    do{
        printf("MyOS>");
        fgets(command,sizeof (command), stdin);
    
        if(strncmp(command, "say", 3) == 0) {
            printf(" %s\n", command+3);
        }
    } while (strncmp(command, "exit", 4));
    return 0;
}

注意:确保分配足够的缓冲区来存储输入命令,并输入少于COMMAND_SIZE字符的输入,以便\n有足够的空间,否则您将面临剩余@的问题987654330@ 个字符。

【讨论】:

  • 这行得通,非常感谢您的详尽解释,我正在尝试独立学习 C,非常感谢这样的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 2017-02-14
  • 2012-10-27
  • 2023-04-03
  • 2011-04-21
  • 2022-09-23
  • 1970-01-01
相关资源
最近更新 更多