Как передать текст через командную строку в Си?

В языке программирования C существует несколько способов передачи текста через командную строку. Рассмотрим каждый из них подробнее.

Первый способ - использование аргументов командной строки. Когда вы запускаете программу из командной строки, вы можете передать ей аргументы после имени исполняемого файла. В C эти аргументы могут быть получены через параметры функции main(). Функция main() имеет следующую сигнатуру:

int main(int argc, char *argv[])

Здесь argc - это целочисленная переменная, указывающая на количество аргументов командной строки, а argv - это массив строк, содержащий сами аргументы. Первый элемент массива argv (argv[0]) содержит имя исполняемого файла программы.

int main(int argc, char *argv[])
{
    // argc - количество аргументов командной строки
    // argv - массив строк с аргументами
    
    // Пример использования аргументов командной строки
    printf("Количество аргументов: %dn", argc);
    printf("Аргументы:n");
    for (int i = 0; i < argc; i++)
    {
        printf("%sn", argv[i]);
    }
    
    return 0;
}

Например, если ваша программа называется "program", и вы запускаете ее с аргументами "hello" и "world", то вывод будет следующим:

Количество аргументов: 3
Аргументы:
program
hello
world

Второй способ - использование функции scanf(). Функция scanf() позволяет получить данные напрямую из стандартного ввода (командной строки) с использованием форматированного ввода.

#include <stdio.h>

int main()
{
    char text[100];
    
    // Считываем текст с помощью scanf()
    printf("Введите текст: ");
    scanf("%s", text);
    
    printf("Введенный текст: %sn", text);
    
    return 0;
}

В данном примере мы объявляем массив символов text размером 100, и затем с помощью функции scanf() считываем текст с клавиатуры и сохраняем его в массив text. Далее выводим введенный текст на экран.

Третий способ - использование функции gets(). Функция gets() считывает строку с командной строки до тех пор, пока не встретит символ новой строки ('n').

#include <stdio.h>

int main()
{
    char text[100];
    
    // Считываем строку с помощью gets()
    printf("Введите строку: ");
    gets(text);
    
    printf("Введенная строка: %sn", text);
    
    return 0;
}

В данном примере мы также объявляем массив символов text размером 100, и затем считываем строку с помощью функции gets(). Далее выводим введенную строку на экран.

Обратите внимание, что функция gets() не безопасна, так как может вызывать переполнение буфера при считывании строки. Рекомендуется использовать функцию fgets() для считывания строк, так как она позволяет указать максимальный размер буфера для предотвращения переполнения.

Вот пример использования fgets():

#include <stdio.h>

int main()
{
    char text[100];
    
    // Считываем строку с помощью fgets()
    printf("Введите строку: ");
    fgets(text, sizeof(text), stdin);
    
    printf("Введенная строка: %sn", text);
    
    return 0;
}

В этом примере мы используем функцию fgets(), которая считывает строку с командной строки с указанием максимального размера буфера и источника ввода (stdin в данном случае). Это предотвращает переполнение буфера и делает код более безопасным.