哭笑不得

sir_marlow 2011-04-10 10:37:39
这个问题太奇怪了,请各位试着运行我下面的代码,工作很简单,就是读一个文件,然后用system call来以特定的方式写进另一个新建的文件里,linux下运行

#include "unistd.h"
#include "fcntl.h"
#include <sys/types.h>
#include <cstdlib>
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

int main()
{
//step 1:
int f1,o1,r,w,rf1,rf2,fp,o2, o3, fx, w_xxx, w_www, del, total, l;
char buffer[100], print1[150], print2[150];
o1 = creat("XYZ.doc",0755); //create own file
f1 = open("xx.xx",0); //open file
while (r>0)
{
r = read(f1,&buffer,100); //read file
if (r <0) //if read operation failed...
{
cout<<"A read error has occurred!"<<endl;
exit(0);
}
w = write(o1, &buffer, 100); //write data into own file from xx.xx
char string[] = "X1Y2A3";
w = write(o1, &string, 6);
if(w<0) //if write operation failed...
{
cout<<"A write error has occurred!"<<endl;
exit(0);
}
lseek(f1, 0, 1); //locate to next character
}
close(o1); //close own file

fp = open("XYZ.doc", 0); //open file
lseek(f1,0,0); //locate to the beginning of file

memset(print1,'\0',sizeof(print1)); //intialize array for printing
memset(print2,'\0',sizeof(print2));
rf1 = read(f1, &print1, 120); //read data for printing
rf2 = read(fp, &print2, 120);

printf("%s\n",print1); //print
printf("%s\n",print2);
//cout<<print2<<endl;
close(fp);
close(f1); //close file xx.xx
return 0;
}

注意红字部分,程序应该是没有问题的,现在我们随便在红色部分变量声明的地方加一个变量,比如加个xx,使红字部份变为int f1,o1,r,w,rf1,rf2,fp,o2, o3, fx, w_xxx, w_www, del, total, l, xx;
请再运行看看,变量名可以随便取,反正只要你加个变量,不论是否用到,这个程序就出错了。。。

帮忙想想办法。。。
...全文
396 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
sir_marlow 2011-04-13
  • 打赏
  • 举报
回复
泪目,在实验室机上运行,无论怎么增减变量,全部都是错误输出......我已经放弃了......
delphiwcdj 2011-04-13
  • 打赏
  • 举报
回复
变量全部初始化
zjs100901 2011-04-13
  • 打赏
  • 举报
回复
不应该放弃
直到失去的那一刻
我们见过多少
在奋斗中无奈放弃的人
无责任随意来去的人
……

上海软星感言

仙剑奇侠传四
zjs100901 2011-04-13
  • 打赏
  • 举报
回复
int f1,o1,r, ......
......
while (r>0)
r初始化一下嘛。
sir_marlow 2011-04-12
  • 打赏
  • 举报
回复
真正好玩的事发生了,我按照各位的方法修改了程序,问题依然存在,而且发现了更好笑的部分:加一个变量输出不正常,再加一个变量又正常了!再加一个又不正常了,可是再加一个又正常了!!换句话说,奇数个变量正常,偶数个不正常!!

举例:int a1, a2, ..., a15;正常
int a1,a2,...,a16; 不正常

我吐血了。。。
  • 打赏
  • 举报
回复
强烈呼吁你换一台机器试一下,看看还是不是同样的结果
bluesky12312388 2011-04-11
  • 打赏
  • 举报
回复
看是否有相应的权限。

测试下了没问题。环境为: Fedora 7 G++ 4.1.2 root
maskhywind 2011-04-11
  • 打赏
  • 举报
回复
编译没有问题呀
sir_marlow 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 luciferisnotsatan 的回复:]

char buffer[100], print1[150], print2[150]; 没有初始化。初始化下试试
[/Quote]

只有buffer木有初始化,我试试,但好象没关系
sir_marlow 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 v_july_v 的回复:]

搞到凌晨三点半...还是多注意休息把
[/Quote]

木事,我这里时间和大陆差12小时,是下午3点半,嘻嘻
luciferisnotsatan 2011-04-11
  • 打赏
  • 举报
回复
char buffer[100], print1[150], print2[150]; 没有初始化。初始化下试试
v_JULY_v 2011-04-11
  • 打赏
  • 举报
回复
搞到凌晨三点半...还是多注意休息把
sir_marlow 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pathuang68 的回复:]

还真有点奇怪了。

前几天一个朋友说的一个非常离奇的问题,也和素数有关...最后好像也是不了了之,没有人说出真正的理由。
你把xx.xx中的素数先减少到10个,看看代码运行正常不?(当时有人建议他这么做,好像是可以的,但没人说出个所以然)

装有Linux的BB,不在身边,没办法测试楼主的代码。

严重关注此贴。
[/Quote]

应该和素数没什么关系,我再试试
sir_marlow 2011-04-11
  • 打赏
  • 举报
回复
编译肯定没问题,但是运行结果问题很大,就多加了一个变量(不管有没有用到),结果完全不一样,难道linux对声明变量总数不满?

让我多试几下,晚会儿把结果弄上来
  • 打赏
  • 举报
回复
好奇地从网上拷了1000以内的素数放在文件里试了一下,没发现问题
fc14 gcc4.5.1
难道你的机器上r没有初始化的时候或正或负
赵4老师 2011-04-11
  • 打赏
  • 举报
回复
static char buffer[100], print1[150], print2[150];
加static将占用空间较大的局部变量由分配在大小有限的堆栈区挪到大得多的全局数据区,避免堆栈溢出。
sir_marlow 2011-04-11
  • 打赏
  • 举报
回复
我的环境是fedora13,g++版本不清楚......
枫继续吹 2011-04-10
  • 打赏
  • 举报
回复
不懂,看不出什么问题
sir_marlow 2011-04-10
  • 打赏
  • 举报
回复
我简单说下:xx.xx文件里保存的是一万以内的素数,我要做的就是新建一个文件(取名为XYZ.doc),读取xx.xx里的字符,每100个字符插入一个字符串X1Y2A3,然后保存进XYZ.doc,接着循环直到结束

按照正常情况下,最后会从两个文件里各输出120个字符,共240个字符,从头开始,修改了红字部分后(加个任意名字的变量)后,程序无BUG(废话),运行结果XYZ.doc里什么也没有,所以最后只输出了120个字符
fengzhw 2011-04-10
  • 打赏
  • 举报
回复
看了半天,真不知道想做什么,又出了什么错。。。
加载更多回复(5)

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧