Вывести переменную в путь создаваемого 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;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h и string.h
- Определяется константа DIR_SEPARATOR, которая содержит символ, используемый в качестве разделителя директорий.
- Объявляется функция full_name, которая принимает указатели на путь и имя файла, указатель на буфер и размер буфера.
- Внутри функции происходит проверка: если длина пути плюс возможный разделитель плюс длина имени файла меньше размера буфера, то происходит склейка пути и имени файла с помощью функции sprintf.
- Если длина пути плюс возможный разделитель плюс длина имени файла больше или равна размеру буфера, то возвращается NULL.
- В функции main создаются массивы path1, path2 и name, а также буфер buf достаточного размера.
- Вызывается функция full_name с передачей в нее указанных выше аргументов.
- Результат выводится на экран с помощью функции printf.
- Функция main возвращает 0, что означает успешное завершение работы программы.