#c
#c
Вопрос:
Я пытался создать файл без использования системных команд. У этого кода, который я написал, есть несколько проблем, если я создаю fptr в начале и проверяю его на нулевое значение, тогда возникает двойное освобождение или повреждение, в противном случае это приводит к дампу памяти. Даже с помощью предыдущего метода я не закрывал файл более одного раза, но я думаю, что между строками, которые я не вижу, скрывается что-то очень простое.
int main()
{
char* filename;
char x;
cout << "enter filename.**: ";
cin >> filename;
struct stat buffer;
if (! stat (filename, amp;buffer))
{
cout << ("It existsn");
}
else
{
FILE* fptr;
fptr = fopen (filename,"w");;
fclose (fptr);
}
}
Действительно ценю вашу помощь! 🙂
Комментарии:
1. Вы забыли выделить место для
filename
. (И поскольку это C , используйтеstd::string
.)2. Если у вас более новый компилятор, вы можете использовать файловую систему TS , которая является частью того, что будет стандартом C 17.
3. как я должен выделить место для имени файла?
4. @cmaster: В «стандартной библиотеке C» такой функции нет.
5. @cmaster
creat
— это функция POSIX, а не стандартная функция C или C . Другой стандарт библиотеки. То жеopen
самое.
Ответ №1:
Вы можете использовать mknod()
в некоторых системах (например, Linux; обратите внимание, что это переносимо не для всех операционных систем).
if (mknod(filename, S_IFREG|0666, 0) != 0) {
throw std::system_error(errno, std::system_category());
}
В переносимом коде вам нужно будет открыть файл, чтобы его создать.