C++ 向我的字符数组添加随机字符的编译器

C++ 向我的字符数组添加随机字符的编译器,c++,char,C++,Char,我有一个名为SearchArray()的函数,它调用另一个名为SearchRecords(char StudentNo[])的函数来检查GREC的数据库数组中是否有学生编号匹配 运行调试器时,如果StudentNum=“12345678”,则StudentNo的值显示为StudentNo=0x22fde0“12345678”。 这些附加字符是什么 SearchArray()函数 void SearchArray(){ char studentNum[8]; cout <

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

运行调试器时,如果
StudentNum=“12345678”
,则StudentNo的值显示为
StudentNo=0x22fde0“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);
    }
}
void SearchArray(){
char studentNum[8];
cout>studentNum;
char i=搜索记录(studentNum);
if(gRecs[i].studentNumber!=studentNum){
cout你是说“0x22fde0”吗?它们不在你的字符数组中,你的字符数组只包含引号中的部分(“12345678”).十六进制数0x22fde0是第一个字符的地址。在C/C++中,任何数组实际上都只是指向第一个元素的指针:变量的值是第一个元素的地址。因此,调试器向您显示该地址值。但调试器也知道字符数组通常存储字符串,因此它也有助于显示您可以将该数组的内容作为字符串进行排序。

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

正如本文所述,您是在比较指针而不是字符串。通过将studentNumber类型更改为std::string,您将省去许多麻烦。这将允许您将比较运算符(=,!=,=)与std::string或原始字符串(char*)一起使用在右边。我强烈建议在和处阅读字符串

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

正如本文所述,您是在比较指针而不是字符串。通过将studentNumber类型更改为std::string,您将省去许多麻烦。这将允许您将比较运算符(=,!=,=)与std::string或原始字符串(char*)一起使用在右边。我强烈建议在和处阅读字符串


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

在哪里可以看到其他字符?当我使用调试器测试代码时..就像在运行它时一样,即使存在匹配项,也无法识别这些额外字符…这些额外字符:0x22fde0?这是
StudentNo
的地址。当您输入
12345678
时,e每个数字填充
studentNum
中的一个元素,不应该有任何附加字符。
gRecs[i]。studentNumber==StudentNo
正在比较两个字符串的地址,而不是字符串中的字符。您需要
strcmp(gRecs[i]。studentNumber,StudentNo)==0
或类似的
std::string((gRecs[i].studentNumber)==std::string(StudentNo)
在哪里可以看到其他字符?当我使用调试器测试代码时..当我运行它时,即使存在匹配项,也无法识别这些额外字符…这些额外字符:0x22fde0?这是
学生号的地址
。当您输入
12345678
时,每个数字填充
中的一个元素studentNum
,不应该有任何附加字符。
gRecs[i]。studentNumber==StudentNo
正在比较两个字符串的地址,而不是字符串中的字符。您需要
strcmp(gRecs[i]。studentNumber,StudentNo)==0
或类似于
std::string((gRecs[i]。studentNumber)==std::string)的内容(学生编号)谢谢你的建议,谢谢你的建议。在C++和C++中,通常的警告是,在大多数上下文中,转换成指向它的第一个元素的指针。数组本身是一个数组。在C语言和C++中,通常的警告是,在大多数上下文中,转换成指向其第一个元素的指针。rray本身就是一个数组。
int SearchRecords(char StudentNo[])
{

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