无法使用C++在Ubuntu设备中写入数组(调试断言失败)表达式(Sturn.null)

我在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;
}
...
}

发表评论