SirenaProgrammer
@SirenaProgrammer
Увлекаюсь программированием и легкой атлетикой

Как мне правильно соединить три строки и сделать системный вызов?

Добрый день. Есть вот такой код на си:
char filenames[1000];
        memset(filenames, 0, 1000);
        printf("Enter filenames:\n");
        read(0, filenames, 1000);
        printf(filenames);
        char* part1 = "file ";
        char* part2 = "| grep 'C source' | wc -1";
        char* result = malloc(strlen(part1) + strlen(filenames) + strlen(part2) + 1);
        memset(result, 0, strlen(part1) + strlen(filenames) + strlen(part2) + 1);
        memcpy(result, part1, strlen(part1));
        memcpy(result, filenames, strlen(filenames));
        memcpy(result, part2, strlen(part2));
        printf(result);
        system(result);

Задача следующая: надо получить на вход у пользователя имена файлов через пробел. Дальше я хочу встроить эти имена в запрос "file | grep 'C source' | wc -1", а дальше сделать вызов этой команды с помощью system. К сожалению, у меня это не выходит. Я пыталась использовать strcat, но тоже ничего не выходит.
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Когда делаете memcpy указатель на result надо смещать на размер предыдущей скопированной строки. Сейчас вы просто копируете следующую строку, затирая предыдущее копирование.
memcpy(result + strlen(part1), filenames, strlen(filenames));

strcat должен нормально отработать, он делает по сути то же самое.
При копировании строк лучше использовать strcpy (или strncpy), она копирует и завершающий 0. memcpy предназначена для копирования памяти произвольного содержимого.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы