当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 18 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : = 写了一段程序,其中有错误,思考良久,还是没有想通? =
帖子发表于 : 2007-03-25 17:23 

注册: 2007-01-25 13:04
帖子: 177
送出感谢: 0 次
接收感谢: 0 次
代码:
#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<stdlib.h>

int
main(int argc,char *argv[])
{   int fd;
   printf("This is a test.\n");
   if(argc>2||argc<2)
   {   prinft("Error-1\n");
      exit(1);
   }
   if((fd=open(argv[1].O_RDWR|O_CREAT))==-1)
   {   prinft("Error-2\n");
      exit(2);
   }
   if((write(fd,"Hello Linux!\n",16))==-1)
   {   prinft("Error-3\n");
      exit(3);
   }
   if((close(fd))==-1)
   {   prinft("Error-4\n");
      exit(4);
   }
   return 0;
}

结果:
$gcc test.c -test

$./test text
This is a test.

$more text
Hello Linux!
Er
$

问题:
为什么会出现一个"Er"?


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-03-25 21:33 
头像

注册: 2005-10-25 11:15
帖子: 1016
送出感谢: 0 次
接收感谢: 1
代码:
if((write(fd,"Hello Linux!\n",16))==-1)

16越界了,应该是13。


_________________
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-03-25 22:06 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
laborer 写道:
代码:
if((write(fd,"Hello Linux!\n",16))==-1)

16越界了,应该是13。


计算\0应该是14吧


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-03-25 22:32 
头像

注册: 2005-10-25 11:15
帖子: 1016
送出感谢: 0 次
接收感谢: 1
BigSnake.NET 写道:
laborer 写道:
代码:
if((write(fd,"Hello Linux!\n",16))==-1)

16越界了,应该是13。


计算\0应该是14吧


就这个例子来看,他不会想把\0写到一个文本文件里吧。


_________________
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-03-26 13:01 

注册: 2007-01-25 13:04
帖子: 177
送出感谢: 0 次
接收感谢: 0 次
谢谢高人 。 :wink:


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-03-26 15:31 
头像

注册: 2006-12-02 12:25
帖子: 689
送出感谢: 0 次
接收感谢: 0 次
晚上回去试一试。


_________________
Titainium


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-03-29 12:58 

注册: 2007-01-25 13:04
帖子: 177
送出感谢: 0 次
接收感谢: 0 次
代码:
#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<stdlib.h>

int
main(int argc,char *argv[])
{   int fd,a,b;
   if(argc!=2)
   {   printf("Error-1\n");
      exit(1);
   }
   printf("Input:");
   scanf("%d",a);
   if((fd=open(argv[1],O_RDWR|O_CREAT))==-1)
   {   printf("Error-2\n");
      exit(2);
   }
   b=write(fd,"123456",a);
   if(b==-1)
   {   printf("Error-3\n");
      exit(3);
   }
   else
   {   printf("%d\n",b);
   }
   if((close(fd))==-1)
   {   printf("Error-4\n");
      exit(4);
   }
   if((execlp("more","more",argv[1],NULL))<0)
   {   printf("Error-5.\n");
      exit(5);
   }
   return 0;
}



总是有错,错误代码"Error-3"


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-03-29 13:39 

注册: 2006-09-07 22:51
帖子: 849
送出感谢: 0 次
接收感谢: 0 次
gcc -Wall /tmp/cc.c
看看是
/tmp/cc.c: In function 'main':
/tmp/cc.c:17: warning: format '%d' expects type 'int *', but argument 2 has type 'int'
//修正
scanf("%d",a); /// scanf("%d",&a);


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-04-01 15:14 

注册: 2007-01-25 13:04
帖子: 177
送出感谢: 0 次
接收感谢: 0 次
wkt 写道:
gcc -Wall /tmp/cc.c
看看是
/tmp/cc.c: In function 'main':
/tmp/cc.c:17: warning: format '%d' expects type 'int *', but argument 2 has type 'int'
//修正
scanf("%d",a); /// scanf("%d",&a);


没看懂......


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2007-04-01 15:32 
头像

注册: 2005-08-25 13:58
帖子: 808
地址: ustc
送出感谢: 0 次
接收感谢: 0 次
DRIFT 写道:
wkt 写道:
gcc -Wall /tmp/cc.c
看看是
/tmp/cc.c: In function 'main':
/tmp/cc.c:17: warning: format '%d' expects type 'int *', but argument 2 has type 'int'
//修正
scanf("%d",a); /// scanf("%d",&a);


没看懂......

就是scanf里面要从输入得到的量要用地址。
所以,scanf("%d",a)是错的,scanf("%d", &a)是正确的。


_________________
爱喝真猪奶茶的夜鸣猪


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2007-04-01 19:47 

注册: 2007-01-25 13:04
帖子: 177
送出感谢: 0 次
接收感谢: 0 次
声名a变量的时候是不是应该用 size_t呀?


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2007-04-01 20:40 

注册: 2007-01-25 13:04
帖子: 177
送出感谢: 0 次
接收感谢: 0 次
nobrain 写道:
DRIFT 写道:
wkt 写道:
gcc -Wall /tmp/cc.c
看看是
/tmp/cc.c: In function 'main':
/tmp/cc.c:17: warning: format '%d' expects type 'int *', but argument 2 has type 'int'
//修正
scanf("%d",a); /// scanf("%d",&a);


没看懂......

就是scanf里面要从输入得到的量要用地址。
所以,scanf("%d",a)是错的,scanf("%d", &a)是正确的。



修改了,还是出错.

大哥能不能给我一段代码事例一下.


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2007-04-03 18:35 

注册: 2006-09-07 22:51
帖子: 849
送出感谢: 0 次
接收感谢: 0 次
引用:
修改了,还是出错.

大哥能不能给我一段代码事例一下.

这也太假了!!
我都试过了!!


用gcc -Wall 把输出贴出来
贴出运行结果!!


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2007-04-05 12:43 

注册: 2007-01-25 13:04
帖子: 177
送出感谢: 0 次
接收感谢: 0 次
freeflag@freeflag-desktop:~/temp$ gcc test.c -o test -Wall
test.c: In function ‘main’:
test.c:16: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’
test.c:21: warning: passing argument 3 of ‘write’ makes integer from pointer without a cast
freeflag@freeflag-desktop:~/temp$


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2007-04-05 14:07 
头像

注册: 2006-12-02 12:25
帖子: 689
送出感谢: 0 次
接收感谢: 0 次
就是scanf的问题,不要用a,要用&a


_________________
Titainium


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 18 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译