【发布时间】:2012-12-03 15:44:19
【问题描述】:
我想用用户输入的名称创建一个文件。
这是我的代码:
int function1(){
char path[50];
char choice_f;
char choice_m;
int flag; <-- updated
mode_t mode;
printf("Filename : ");
scanf("%s", path);
//printf("%s", path); <-- path can be shown
printf("\n");
printf("Desire flag : ");
scanf("%c", &choice_f); <-- updated
//printf("%s", path); <-- path CANNOT be shown from here
while (choice_f != '1' && choice_f != '2' && choice_f != '3'){
printf("Invalid input! Flag: ");
scanf("%c", &choice_f); <-- updated
}
if (choice_f == '1')
flag = O_RDONLY; <-- updated
else if (choice_f == '2')
flag = O_WRONLY; <-- updated
else if (choice_f == '3')
flag = O_RDWR; <-- updated
printf("Desire mode : ");
scanf("%c", &choice_m); <-- updated
while(choice_m != '1' && choice_m != '2' && choice_m != '3' && choice_m != '4'){
printf("Invalid input! Mode: ");
scanf("%c", &choice_m); <-- updated
}
if (choice_m == '1')
mode = S_IRWXU;
else if (choice_m == '2')
mode = S_IRWXG;
else if (choice_m == '3')
mode = S_IRWXO;
else if (choice_m == '4')
mode = S_IRWXU | S_IRWXG | S_IRWXO;
int fd = open(path, (int)flag|O_EXCL|O_CREAT);
fchmod(fd, mode);
printf("%d", fd);
if (fd == -1){
perror("error");
return 1;
}else
printf("File \'%s\' Created \n", path);
if (close(fd)<0)
perror("close()");
return 0;
}
但在程序结束时,我收到错误消息:
Error: Bad file descriptor
我多次测试path,似乎在第二个scanf() 之后,path 无法显示。即使我尝试将path 分配给另一个变量,它仍然是一样的。
我应该怎么做才能解决这个错误?
【问题讨论】:
-
哇!您只需将字符串转换为 int ! “(int)flag”显然非常非常糟糕。我不希望
open用这样的垃圾输入做你想做的事。之后 fd 将变为 -1。 -
scanf("%s", &choice_f)正在破坏您的堆栈 - 您正在将字符串读入单个字符变量。 -
老实说,这是我朋友做的代码,我正在做另一部分,现在我正在组合所有功能。所以,当我尝试将它与其他功能结合时出现错误,但在我结合它之前它是有效的。代码相同,但出现错误。
-
对于未来的问题,请仅提供您的问题的最小示例。在这种情况下,所有这些多行打印语句使代码更难阅读,实际上只是噪音。
-
@l4mpi,在我之前的帖子中,我发布了主要问题,并简化了代码,这完全没有在我的代码中使用,只是概念,我得到的东西被批评为糟糕的设计。跨度>
标签: c ubuntu-11.04