Вывести переменную в путь создаваемого txt файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток. Вопрос такой - как вывести переменную в путь создаваемого txt файла? file = fopen("world\\test.txt", "a"); - а мне надо, чтобы имя файла было задана переменной, объявленной и инициализированной выше.

Решение задачи: «Вывести переменную в путь создаваемого txt файла»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
#define DIR_SEPARATOR "\\"
 
/* char * full_name(const char * path, const char * name, char * buf, size_t len)
 * принимает указатели на путь и имя файла, указатель на буфер и размер буфера.
 * Возвращает указатель на склеенную в буфере строку из пути и имени,
 * вставляя при необходимости между ними разделитель из DIR_SEPARATOR.
 * если полный путь не помещается в буфер - предыдущее содержимое
 * сохраняется, функция возвращает NULL
 */
char * full_name(const char * path, const char * name, char * buf, size_t len) {
    if ( strlen(path) + ( ( path[strlen(path) - 1] == *DIR_SEPARATOR ) ? 0 : 1 ) + strlen(name) < len ) {
        sprintf(buf, "%s%s%s", path, ( ( path[strlen(path) - 1] == *DIR_SEPARATOR ) ? "" : DIR_SEPARATOR ), name);
        return buf;
    }
    else
        return NULL;
}
 
int main(void) {
    char path1[] = "somewhere\\in\\filesystem";
    char path2[] = "in\\some\\other\\place\\";
    char name[] = "my_cool_file.name";
    char buf[BUFSIZ];
 
    printf("Full path #1: %s\n", full_name(path1, name, buf, BUFSIZ));
    printf("Full path #2: %s\n", full_name(path2, name, buf, BUFSIZ));
 
    return 0;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: stdio.h и string.h
  2. Определяется константа DIR_SEPARATOR, которая содержит символ, используемый в качестве разделителя директорий.
  3. Объявляется функция full_name, которая принимает указатели на путь и имя файла, указатель на буфер и размер буфера.
  4. Внутри функции происходит проверка: если длина пути плюс возможный разделитель плюс длина имени файла меньше размера буфера, то происходит склейка пути и имени файла с помощью функции sprintf.
  5. Если длина пути плюс возможный разделитель плюс длина имени файла больше или равна размеру буфера, то возвращается NULL.
  6. В функции main создаются массивы path1, path2 и name, а также буфер buf достаточного размера.
  7. Вызывается функция full_name с передачей в нее указанных выше аргументов.
  8. Результат выводится на экран с помощью функции printf.
  9. Функция main возвращает 0, что означает успешное завершение работы программы.

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы