【发布时间】:2020-09-07 14:18:33
【问题描述】:
我正在开发一个在控制台应用程序中显示以下字符/整数的程序。
我编写的代码在控制台应用程序中有效,但在表单中无效...
我还想在我的表单中显示这些值(textBox->text)。
我的 myfunctions.h 文件:
typedef struct{
char Header [23]; //the char I want to display is 23 characters long
int Version [4]; //4 characters...
char Projectname [21];
char Developer [8];
char email [16];
char Description [132];
char Unknown [1];
}PackedContent;
void BinaryReader(){
system("CLS");
PackedContent t;
fstream myFile;
myFile.open("PackedContent.opf");
if(!myFile){
cout<<"An unknown error occured! Cannot read .opf file... exiting now... \n"<<endl;
}else{
cout <<"Reading packed data content... done!\n"<<endl;
myFile.read((char *)&t, sizeof(PackedContent));
cout<<"\nHeader :" <<t.Header <<endl; // Header info [ok]
//cout<<"\nVersion :" <<t.Version <<endl; // Project Version [err]
cout<<"\nProject name:" <<t.Projectname <<endl; // Project name
cout<<"\nDeveloper name:" <<t.Developer<<endl;
cout<<"\nEmail :" <<t.email <<endl; // Developer email
cout<<"\nDescription :" <<t.Description <<endl; // Project description [ok]
cout<<"Unknown" <<t.Unknown <<endl;
}
表格:
Binary Reader.H (form)
PackedContent t;
BinaryReader();
textBox1->Text = t.Header; // doesnt work...
我也试过了:textBox1->Text = Convert::ToString(t.Header); //doesn't work...
【问题讨论】:
-
我认为你需要为 c++-cli 和/或 winforms 标记
-
char数组作为字符串的问题是它们需要以空值终止。通常在普通的标准 C++ 中(您的表单代码很可能不是,它可能是托管的 C++/CLI)然后您可以从任意 un 终止的数组创建一个字符串作为std::string(t.Header, 23)。但是考虑到您的程序可能具有 C++/CLI 的性质,您可能需要找到一种特定于 C++/CLI 的方法来做同样的事情。 -
您的标题以及代码中的注释具有误导性,您没有“SINGLE char”,您有一个
char的array。 “单个字符”将是单个char,而不是数组。您可能在某些地方说“char” 的意思是 "string" -
您忘记了终止零,这就是您遇到问题的原因。如果您要将字符串存储在长度为 23 的 c-array 中,您需要
char[24]来包含尾随零。无论如何,使用这个 c 数组来存储文本是 C 风格的代码而不是 C++。 -
另外请提供minimal reproducible example并描述实际结果。 “不起作用”不是对问题的描述。