#c #file #fopen
#c #файл #fopen
Вопрос:
Я пытаюсь создать и записать файл на C — однако по какой-то причине этот код выполняется успешно, файл не создается. Пожалуйста, найдите мой код ниже, любая помощь будет оценена
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int num;
FILE* fptr;
fptr = fopen("E:\SAMPLE FILESsample.txt", "w ");
if (fptr == NULL)
{
printf("Error!");
exit(1);
}
printf("Enter num: ");
(void)scanf("%d", amp;num);
fprintf(fptr, "%d", num);
fclose(fptr);
return 0;
}
Комментарии:
1. OT:
(void)scanf("%d", amp;num);
не игнорируйте возвращаемые значения. Обработка кодов возврата важна для обработки ошибок и отладки.2. Вторая обратная косая черта неправильно экранирована в вашем имени файла.
3. путь в
fopen
может быть проблемой, если вы поделитесь тем, что естьSAMPLE FILES
, или попытаетесь сначала использовать жестко закодированный путь, а затем создать по мере необходимости.4. Файл находится в корневом каталоге диска E:. Еще раз доказывая, что вы никогда не должны игнорировать предупреждения компилятора.
5. Привет, добро пожаловать в stack overflow. Как упоминалось выше, путь к файлу на диске E, вероятно, является проблемой. Вы неправильно экранировали каталог для файла? Существует ли фактический каталог? Вам нужно зафиксировать ошибку, и это подскажет вам, что именно не так.
Ответ №1:
Это очень простая проблема.
fptr = fopen("E:\SAMPLE FILESsample.txt", "w ");
В этом проблема. Как вы, должно быть, знаете,
используется для определения escape-последовательности. Из-за этого для фактического
значения вам нужно поместить его 2 раза, как вы это делали в E:\
. Файл, вместо создания в SAMPLE FILES
, создается в корневом каталоге.
Измените его на :
fptr = fopen("E:\SAMPLE FILES\sample.txt", "w ");
И ваш код должен работать. Я протестировал его и получил результат.
Убедитесь, что у вас есть папка с именем SAMPLE FILES на E: Иначе fopen()
возвращает NULL.
Ответ №2:
Чтобы открыть файл для чтения или записи, лучше всего, по крайней мере, иметь какую-то проверку ошибок и отчеты об этом. Пожалуйста, посмотрите базовый пример ниже:
#include <stdio.h>
#include <errno.h>
#include <string.h>
extern int errno ;
int main () {
FILE * pf;
int errnum;
pf = fopen ("e:\sample files\sample.txt", "wb");
if (pf == NULL) {
errnum = errno;
fprintf(stderr, "Value of errno: %dn", errno);
perror("Error printed by perror");
fprintf(stderr, "Error opening file: %sn", strerror( errnum ));
} else {
printf("Enter num: ");
(void)scanf("%d", amp;num);
fprintf(fptr, "%d", num);
fclose(fptr);
fclose (pf);
}
return 0;
}
По крайней мере, таким образом, если вы получите сообщение об ошибке, у вас есть хорошие шансы исправить или устранить ее программно.
Ответ №3:
fptr = fopen(«E:SAMPLE FILESsample.txt «, «w «);
->
fptr = fopen(«E:SAMPLE FILESsample.txt «, «w «);
попробуйте
Комментарии:
1. Нет, символ ` ` используется в качестве escape-последовательности. Вам нужно 2 из них, чтобы зарегистрировать фактический ` ` в строке. В вашей строке обратная косая черта обрабатывается как
s
иS
.