У меня есть задание создать мою собственную версию UNIX ar в C. Я разбил назначение на несколько частей, и я просто пытаюсь записать имена файлов в другой файл (который будет моим архивом) на этом этапе. Я могу создать файл, и когда я использую printfs, чтобы убедиться, что получаю правильные аргументы из командной строки, имена файлов верны. Когда я открываю созданный мной файл, который должен содержать эти имена файлов, все происходит на азиатском языке.Файл написан на китайском языке (я думаю?)
Я исследовал проблему и не нашел многого для продолжения. Единственное, что я нашел, - это то, что файлы кодируются по-разному, но я довольно смущен в этот момент.
#include <stdlib.h>
#include "ar.h"
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main (int argc, char **argv)
{
char *file_name, *archive_name;
size_t count = 50;
int i, fd, num_written;
//command line options to do later
//argv[1]
//get archive name
archive_name = argv[2];
//get file names to add to archive
for (i = 3; i<argc; i++)
{
file_name = argv[i];
}
//create archive file
fd = open(archive_name, O_RDWR |O_CREAT|O_APPEND);
if (fd < 0){
perror("Error while opening file.\n");
exit(EXIT_FAILURE);
}
else
printf("File %s opened successfully\n", archive_name);
//write file names into archive file
for (i = 3; i<argc; i++)
{
printf("file name: %s\n", argv[i]);
num_written = write(fd, argv[i], 50);
if (num_written == -1){
perror("Error while writing to archive.\n");
exit(EXIT_FAILURE);
}
}
close(fd);
return 0;
}
Скомпилируйте все предупреждения и информацию об отладке (например, 'gcc -Wall -g'). Научитесь использовать отладчик ('gdb'). Избегайте неинициализированных переменных (например, 'имя_файла' или' i'). Бойтесь [неопределенного поведения] (http://en.wikipedia.org/wiki/Undefined_behavior) –
Возможно, проблема заключается в вашем редакторе? Попробуйте другой редактор и проверьте, отображаются ли в нем также и китайские буквы. – maja
'num_written = write (fd, argv [i], 50);' Откуда вы знаете, что 'argv [i]' имеет ровно 50 символов? – zwol