Как извлечь строку после слова в C

Я пытаюсь добавить в свою программу функциональность, которая получает определенное слово или предложение после определенного слова в C.

Например. Когда я пытаюсь ввести: «Скажи 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;
}

При запуске программа запрашивает входную строку, и в случае, если моя строка начинается с «сказать», я хочу, чтобы она выводила следующие слова/строку.

Вы не можете сохранить строку в один char как char command;. Это У.Б. Массив символов был бы более подходящим.

Scheff's Cat 20.12.2020 15:37

Единственная печать printf("MyOS>");. Опубликуйте настоящий код.

chux - Reinstate Monica 20.12.2020 18:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
2
985
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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, иначе вы столкнетесь с проблемами с оставшимися \n символами.

Это сработало, большое спасибо за подробное объяснение, я пытаюсь самостоятельно изучать C, и такие ответы очень ценятся.

Jean Philip Juachon 21.12.2020 09:24

Другие вопросы по теме