我在Windows上工作,我试图用VisualStudio 2019中的C++编写一个数组到Ubuntu设备中。以下是我的代码示例:
int Run\u writecablable(char*pcIPAddress、int iNumArgs、float*fArgs、int*ianassize、char*sAns)
...
...
...
char pcFolderName[256];
char pcFileName[256];
sprintf(pcFolderName,“%s\\%s”,pcSavePath,pcUUTSerialNumber);
sprintf(pcFileName,";%s\\calib_rfclock.conf";,pcFolderName);
//在PC上写表
文件*pFileW;
pFileW=fopen(pcFileName,“wb”);
fwrite(&;CalibTable,sizeof(char),CalibTable.hdr.v1.u32Len,pFileW);
fclose(pFileW);
}
返回0;
但是,我一直在从微软VisualC++调试库中弹出这样的弹出窗口,上面写着:
调试断言失败:
节目:
文件:f:\dd\vctools\crt\u bld\sefl\u x86\crt\src\fwrite.c
行:77
表达式:(流!=NULL)
我找到了这个线程,并尝试在我的Ubuntu设备上以root身份登录。我还尝试:
装载-o重新装载,rw/path/to/parent/directory
chmod 777/path/to/parent/directory
我还可以手动创建/编辑我试图用代码写入的目录中的任何文件,但在运行它时会出现相同的错误
有人知道这是什么原因吗?我想可能是窗户那边,但我不知道我做错了什么。先谢谢你
您从不检查打开文件是否成功,而且很可能失败,这就是为什么会出现调试弹出窗口。使用\作为目录分隔符可能是它失败的唯一原因,但您应该检查以确定
我建议您使用std::filesystem::path(C++17)来构建路径。这使得以可移植的方式创建路径变得容易。您还可以使用C++标准 STD::OFFROWS创建文件。这样你就不需要在事后关闭它了。它在超出范围时自动关闭
例如:
\include<;塞尔诺>;
#包括<;cstring>;
#包括<;文件系统>;
#包括<;fstream>;
int Run_writecablable(char*pcIPAddress,int iNumArgs,float*fArgs,
int*iAnsSize,char*sAns)
{
...
//构建std::文件系统::路径:
auto-pcFolderName=std::filesystem::path(pcSavePath)/pcUUTSerialNumber;
自动pcFileName=pcFolderName/“calib_rfclock.conf”;;
//仅当打开文件成功时才尝试写入文件:
if(std::of流pFileW(pcFileName,std::ios::binary);pFileW){
//已成功打开文件,现在将其写入:
pFileW.write(重新解释cast<;const char*>;(&;CalibTable),
CalibTable.hdr.v1.u32Len);
}否则{
//打开文件失败,请打印原因:
标准:cerr<;<;pcFileName<;<;<;<;标准:strerror(errno)<;<;标准:endl;
}
...
}