我有一个名为SearchArray()的函数,它调用另一个名为SearchRecords(char StudentNo [])的函数来检查gRecs的数据库数组,以查找学号中的匹配项。
当我运行调试器时,如果StudentNo = 0x22fde0 "12345678"
,则StudentNo的值显示为StudentNum = "12345678"
。
这些额外的角色是什么?
SearchArray()函数
void SearchArray(){
char studentNum[8];
cout << "Enter student number: ";
cin >> studentNum;
char i = SearchRecords(studentNum);
if (gRecs[i].studentNumber != studentNum){
cout << "Record not found" << endl;
}
else {
PrintRecord(i);
}
}
SearchRecords()函数
int SearchRecords(char StudentNo[])
{
for (int i = 0; i < gNumRecs; i++){
if(gRecs[i].studentNumber == StudentNo)
{
return i;
}
}
return -1; //not found
}
答案 0 :(得分:1)
你的意思是&#34; 0x22fde0&#34;?那些不在你的角色数组中,你的角色数组只包含引号中的部分(&#34; 12345678&#34;)。十六进制数0x22fde0是第一个字符的地址。在C / C ++中,任何数组实际上只是指向第一个元素的指针:变量的值是第一个元素的地址。因此调试器会向您显示该地址值。但它也知道字符数组通常存储字符串,因此它也有助于将该数组的内容显示为字符串。
答案 1 :(得分:1)
正如此comment所述,您需要比较指针而不是字符串。通过将studentNumber类型更改为std :: string,您可以避免许多麻烦。这将允许您在右侧使用比较运算符(==,!=,&lt;,&lt; =,&gt;,&gt; =)与std :: string或原始字符串(char *)。我强烈建议您在tutorialspoint.com和cplusplus.com上阅读字符串。
将来发布时,请发布任何相关的自定义数据结构(例如gRecs元素类型的布局),这有助于我们更快地解决问题。