回 帖 发 新 帖 刷新版面

主题:新手的几个问题 求助

本人是个新手,本人刚学几个月c语言,只会库函数,使用borland c++builder遇到了几个问题,希望高手前辈们指点。多谢了,


[1]关于函数fwrite();应该是个标准库函数,我使用中发现有这样现象:

当定义
struct MYWORD
{
long count;
char word[32];
char firstletter;
int length;
};
struct MYWORD myword;
FILE *pfile;
后,用fwrite(myword,sizeof(struct MYWORD),1,pfile);
输出到文件后,用二进制文件编辑器查看发现当count每次增加使16进制数成为0A时;
文件中都会多了0D,变成0D0A(回车换行符),文件长度变了;这会不会导致以后读文件出错?
是否这是编译器选项设置错了?默认成文本文件。能说明这种自动机制是否C++BUILDER独有的吗?
[2] 另外struct MYWORD在输出文件中长度变成44字节,char firstletter占了4个,
这是编译器为加快处理速度,默认分配内存32位导致的结果吧?编译器这种自做主张;
会不会使不同编译器EXE文件输出不同结构的struct MYWORD到文本pfile呢?
这种自动机制是可设定选项吗?
[3]c++中this指针与Dephi中 self有什么区别,谢谢了。

回复列表 (共8个回复)

沙发

回答[1]、[2]两个问题:
[1]:你说的不太清楚,count是什么意思,所以,有点看不明白。
[2]char型占用的是1个字节。所以,sizeof(struct MYWORD)!= 44

板凳

[2]char型占用的是1个字节。所以,sizeof(struct MYWORD)!= 44 ???????????????

什么啊soser,应该是44,是内存分配优化的默认设置,可以在OPTION-》ADVANCE COMPILER-》DATA ALIGNMENT里把 QUAD WORD设置为BYTE。

3 楼


4 楼

头一次在论坛求助,说的可能不太清楚,头一个问题看书弄清了,是我用fopen(filename,”r“)打开,应该用”rb“打开的。
但第二个问题还没解决,那个count是我用来计算准备输出的单词数的,这是段处理英文文本的程序,CSQCPU先生说的该是对症药,多谢两位了,我是自学编程有很多问题,
那第三个问题能解答吗?我还想问一下,书上说在类的实例中,
象建立了Form1中不应该出现直接引用自身如Button1Click()事件中Form1->Hide();
的代码,但我看到很多这样的代码。为什么在事件中不能出现Form1;
多谢了

5 楼

是可以出现自身引用的,但是最好是不要引用自身,因为如果你使用form1->hide()这类的代码,程序段会把Form1当做其它类来处理,它会首先在程序段中找一下form1这段数据,如果你直接在程序中用hide(),它会认为这是自身的一个方法,不用在内存中寻找。所以这是一种优化的写法。

6 楼

谢谢qining-china,以后还望多多指教。

7 楼

干什么初学就搞那么复杂的问题

8 楼

这个跟ASCII码有关阿

我来回复

您尚未登录,请登录后再回复。点此登录或注册