编译器将随机字符添加到我的char数组中

时间:2017-03-18 04:24:43

标签: c++ char

我有一个名为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
}

2 个答案:

答案 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.comcplusplus.com上阅读字符串。

将来发布时,请发布任何相关的自定义数据结构(例如gRecs元素类型的布局),这有助于我们更快地解决问题。