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

compiler adding random characters to my char array

本文关键字:我的 char 数组 添加 随机 字符 编译器      更新时间:2023-10-16

我有一个名为SearchArray((的函数,它调用另一个名为SearchRecords(char StudentNo[](的函数来检查gRecs的数据库数组中是否有学生编号的匹配。

当我运行调试器时,如果StudentNum = "12345678",则 StudentNo 的值显示为 StudentNo = 0x22fde0 "12345678" 。这些附加字符是什么?

搜索数组(( 函数

  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);
    }
}

搜索记录(( 函数

int SearchRecords(char StudentNo[])
{
for (int i = 0; i < gNumRecs; i++){
    if(gRecs[i].studentNumber == StudentNo)
    {
        return i;
    }
}
return -1; //not found
}

你是说"0x22fde0"吗?这些不在您的字符数组中,您的字符数组仅包含引号中的部分("12345678"(。十六进制数0x22fde0是第一个字符的地址。在 C/C++ 中,任何数组实际上都只是指向第一个元素的指针:变量的值是第一个元素的地址。因此,调试器会向您显示该地址值。但它也知道字符数组通常存储字符串,因此它也有助于将该数组的内容显示为字符串。

正如此注释所指出的,您正在比较指针而不是字符串。通过将学生数字类型更改为 std::string,您可以省去许多麻烦。这将允许您使用比较运算符(==,!=,<,<=,>,>=(,右侧带有 std::string 或原始字符串(char*(。我强烈建议在 tutorialspoint.com 和 cplusplus.com 阅读字符串。

以后发帖

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

相关文章: