今天又碰到不懂的的地方啦,我好菜哦

1。 printf( "Open\n" ); memcpy( mCmdParam.Open.mPathName, "\\C51\\CH375HFT.C", MAX_PATH_LEN ); i = ExecCommand( CMD_FileOpen, MAX_PATH_LEN );

这里打开指定的文件时,memcpy指定复制的长度是MAX_PATH_LEN??前面MAX_PATH_LEN定义为32了, 那岂不是把\\C51\\CH375HFT.C 复制完以后继续复制0字符,这样不会出错么? ======================================== 2 for ( i = 0; i < MAX_PATH_LEN - 1; i ++ ) if ( mCmdParam.Enumer.mPathName[ i ] == 0 ) break; mCmdParam.Enumer.mPathName[ i ] = c; i = ExecCommand( CMD_FileEnumer, i+1 );

这里参数长度怎么会是i+1呢? mpathname数组里第i个元素已经是结束符了,所以参数长度应该是i吧 ========================================

3 fileopen以后如果没找到的搜索程序有一段不明白 其中strcpy( DATA_BUF, "Note: \xd\n原本是打算将/C51/CH375HFT.C文件中的小写字母转成大写后写入新的文件,但是找不到这个文件\xd\n" ); 是接在搜索循环for ( c = 0; c < 255; c ++ ) { /* 最多搜索前255个文件 */ ... } 后面的。 如果FileEnumer执行成功,等到c!<255时也会退出循环,接下来就执行strcpy( DATA_BUF, "Note: \xd\n原本是打算将/C51/CH375HFT.C文件中的小写字母转成大写后写入新的文件,但是找不到这个文件\xd\n" ); 可是明明已经搜索成功了阿 ,这里这样是什么意思 ========================================

4 这里还是没弄明白 NewSize = strlen( DATA_BUF ); /* 新文件的长度 */ SecCount = ( NewSize + 511 ) >> 9; /* (NewSize+511)/512, 计算文件的扇区数,因为读写是以扇区为单位的 */ 为什么NEWSIZE要+511呢? 有人说时凑扇区数? 不解... -_-+

1,复制完以后继续复制0字符,这样不会出错!库里在发现文件名有\0,结束符后,后面的字符就忽略了. 2,mCmdParam.Enumer.mPathName[0]-mCmdParam.Enumer.mPathName[ i ],总共不是i+1个字节数据吗! 3,在没找到想要的文件后,将其他文件枚举,然后输出,然后将strcpy( DATA_BUF, "Note: \xd\n原本是打算将/C51/CH375HFT.C文件中的小写字母转成大写后写入新的文件,但是找不到这个文件\xd\n" ); 写到新建的文件中. 4,如果文件是512个字节,那么最后的扇区数是(512+511)/512=1, 如果文件是513-1024,那么扇区数是((513_1023)+511)/512=2,


谢谢你, 我还有新问题哦


只有登录才能回复,可以选择微信账号登录