| windflowers1976 回复于:2004-05-09 13:08:50
|
[quote:aabbd45315="luoweiqiao"]我在OPEN函数中直接使用文件名的串可以创建文件.
例: OPEN("FILENAME",O_CREAT,0700);
而我用READ函数接收输入的字符串到一个字符串数组,创建文件由该字符串数组指定的文件名.
例: READ(0,FILENAME,SIZEOF(FILENA..........[/quote:aabbd45315]
贴出你的代码.
memset ( filename, 0, sizeof(filename) );
read ( 0, filename, sizeof(filename)-1 );
去学习下,如何进行安全的编程.
|
| luoweiqiao 回复于:2004-05-09 15:39:56
|
在READ 函数开始时我调用了BZERO函数.
但是运行的问题还是这样.
|
| luoweiqiao 回复于:2004-05-09 16:30:41
|
代码:
int fd;
char filename[80];
bzero(filename,sizeof(filename));
write(1,"filename:",9);
read(0,buf,sizeof(buf));
if(open(filename,O_CREAT,0700)<0(
{
printf("file cannot creat\n");
exit(1);
}
printf("file is creat\n");
exit(0);
}
|
| hzhrh 回复于:2004-05-09 16:34:29
|
read函数应该是Open后的句柄。
|
| flw 回复于:2004-05-09 17:42:55
|
read 完了是不是有必要把回车符去掉?
|
| luoweiqiao 回复于:2004-05-09 22:28:43
|
没错啊!我是接受键盘输入。
我测试了一下,把读得的字符串的实际长度+1赋予0还是没用。
|
| lenovo 回复于:2004-05-09 22:34:40
|
[quote:e8c95b3d33="luoweiqiao"]没错啊!我是接受键盘输入。
我测试了一下,把读得的字符串的实际长度+1赋予0还是没用。[/quote:e8c95b3d33]
你检查一下'\n'字符在哪个位置?
应该在哪里赋值为0。
|
| luoweiqiao 回复于:2004-05-09 22:41:16
|
要加的话应该是加到字符串实际长度加+1的位置吧!
'\n',占用数组空间吗?
|
| win_hate 回复于:2004-05-09 23:12:42
|
[quote:4b32e863bb="luoweiqiao"]ero(filename,sizeof(filename));
write(1,"filename:",9);
read(0,buf,sizeof(buf));
if(open(filename,O_CREAT,0700)<0(
{
printf("file cannot creat\n");
exit(1);
}
printf("file is creat\n");
e..........[/quote:4b32e863bb]
文件名读到 buf里了,却用 filename 去打开.....
|
| hsgzr 回复于:2004-05-10 00:08:01
|
文件名你没有保存到filename里 当然打不开了
|
| luoweiqiao 回复于:2004-05-10 01:12:04
|
不好意思,发上来的源代码打错了,不是BUF,是FILENAME。
我在测试时是用FILENAME。
|
| fwizard 回复于:2004-05-10 08:43:23
|
先读后建是什么意思?
把完整代码粘一下,可以帮你测试一下
|
| luoweiqiao 回复于:2004-05-10 09:38:53
|
这个程式是根据用户需要创建文件名.
void main(void)
{
int fd;
char filename[80];
bzero(filename,sizeof(filename));
write(1,"filename:",9);
read(0,filename,sizeof(filename));
if(open(filename,O_CREAT,0700)<0(
{
printf("file cannot creat\n");
exit(1);
}
printf("file is creat\n");
exit(0);
}
很奇怪的是系统虽然显示MEMORY FAULT - CORE DUMPED 的信息,但是文件还是创建了.
|
| luoweiqiao 回复于:2004-05-10 09:58:01
|
文件虽然创建但是不能对文件进行操作,用LS 文件名不能显示这个文件.
在这个目录下用LS 文件名的第一个字符* 就可以显示这个文件.
如果将READ函数读取的这个串从第STRLEN(FILENAME)-1 开始到SIZEOF(FILENAME)-1 的字符赋予空格, 便不会出现MEMORY FAULT - CORE DUMPED . 这个提示,并且文件也创建了,和先前的一样文件还是不可以用 LS 文件名来显示这个文件名.
|
| fwizard 回复于:2004-05-10 10:03:57
|
[quote:b290fe8ba7]
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void)
{
int fd;
char filename[80];
bzero(filename,sizeof(filename));
write(1,"filename:",9);
read(0,filename,sizeof(filename));
if(open(filename,O_CREAT,0700)<0)
{
printf("file cannot creat\n");
exit(1);
}
printf("file is creat\n");
exit(0);
} [/quote:b290fe8ba7]
测试没有问题啊
你在看看
另:[b:b290fe8ba7]if(open(filename,O_CREAT,0700)<0([/b:b290fe8ba7]错了
|
| luoweiqiao 回复于:2004-05-10 16:40:07
|
那为什么我运行的时候会出现MEMORY FAULT - CORE DUMPED 的提示信息呢?
|
| flw 回复于:2004-05-10 16:46:18
|
[quote:1279b8f674="luoweiqiao"]要加的话应该是加到字符串实际长度加+1的位置吧!
'\n',占用数组空间吗?[/quote:1279b8f674]
要加的话,应该是
filename[strlen(filename)-1] = 0x00;
才对。
你试试,问题应该出在这里了。
|
| flw 回复于:2004-05-10 16:56:30
|
[code:1:b697130ee4][mochou@WebAgent mochou]$ cat t1.c
# include <stdio.h>
# include <string.h>
int main( void )
{
int fd;
char filename[80];
memset( filename, 0x00, sizeof(filename) );
write(1,"filename:",9);
read(0,filename,sizeof(filename));
fprintf( stderr, "filename's len: [%d]\n", strlen(filename) );
fprintf( stderr, "last char: [%d]\n", filename[strlen(filename)-1] );
return 1;
}
[mochou@WebAgent mochou]$ cc -o t1 t1.c
[mochou@WebAgent mochou]$ ./t1
filename:abc
filename's len: [4]
last char: [10]
[mochou@WebAgent mochou]$[/code:1:b697130ee4]
楼主你看看,我只输入了 abc 三个字母,但是 strlen 的结果是 4,
说明多了一个字符,
多出来的最后一个字符是 ASCII 码的 10,也就是换行符。
所以,我想应该是这个原因引起的。
|
| fwizard 回复于:2004-05-10 17:16:29
|
[quote:39b3897d92]MEMORY FAULT - CORE DUMPED[/quote:39b3897d92]
flw大哥运行程序,会看到这个错误吗?奇了怪了
|
| luoweiqiao 回复于:2004-05-11 08:48:57
|
非常感谢各位!
|
| 蓝色键盘 回复于:2004-05-11 09:31:21
|
read后
filename[strlen(filename)-1] = 0x0;
这样属于安全的方式,flw的正确的。
|
| lysheng29 回复于:2004-05-11 10:14:14
|
創建文件的filename 應是一個空終止的字串
|
| FH 回复于:2004-05-11 10:52:39
|
呵呵
|