Я пишу C программу, которая ожидает имя файла в качестве аргумента. Программа прочтет содержимое файла и выведет другой файл (с аналогичным именем, с таким же расширением, но с добавленными символами в конце имени).
Например, если я запускаю Двоичный файл выглядит так:
./a.out some_file.txt
Затем будет создан новый файл some_file_out.txt
.
New File Created: [some_file_out.txt]
Мой код ниже работает, но он слишком уродлив. Я уверен, что есть лучший способ сделать это. Я подумал о работе с std::string
, и это упростило бы ситуацию, но я не смогу использовать строковое значение с fopen()
, поскольку оно принимает только char*
переменные имени файла.
Что лучше способ манипулирования char*
переменной?
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[]) {
// validate argc count and that argv[1] file exists
// assume all validation is done. For simplicity's sake.
char* input_file = argv[1];
/* do something with the file*/
char output_file[strlen(argv[1]) + 4]; // reserve a new char[] with the same size
// as the input file, plus 4 characters for
// the output filename variation
// assuming the extension is 3 characters long in all cases
int dot_location = strlen(argv[1])-4;
// copy characters from input filename to output filename
for(int i=0; i<dot_location ; i++) {
output_file[i] = input_file[i];
}
// add the name variation:
output_file[dot_location ] = '_';
output_file[dot_location+1] = 'o';
output_file[dot_location+2] = 'u';
output_file[dot_location+3] = 't';
// add the extension back
for(int i=0; i<4; i++) {
int new_index = dot_location + i + 4;
int old_index = dot_location + i;
output_file[new_index] = input_file[old_index];
}
// make sure the last character is a null value (not required)
// output_file[dot_location+8] = '\0';
// do something with the output file...
printf("New File Created: [%s]\n", output_file);
}