编译器将随机字符添加到我的 char 数组中
compiler adding random characters to my char array
我有一个名为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元素类型的布局(,这有助于我们更快地解决问题。
相关文章:
- 为什么我的 Char* 在填充整数后为空?
- 当我将 char 数组发送到输入参数为字符串的函数时会发生什么?
- 调用'maps::size(char [20], char&)'没有匹配函数,但我认为我的方法有
- 我如何使我的循环转到char*阵列的尽头,并将每个城市都放在链接的列表中(城市被划分为白色的空间)
- 如何让我的 strchr 函数同时将'const char'数组和'char'数组作为第一个参数?
- 我正在尝试计算 char 数组中的内容,直到 null 终止,但每次编译时,我都会得到一个比我的数组大的数字
- 编译器将随机字符添加到我的 char 数组中
- 当我释放由CFFI生成的DLL分配的char*时,为什么我的应用程序会崩溃
- c ++ 我的 char* 数组被最后一个添加的元素覆盖
- 使用 char16_t 类型作为 char[] 数组,并通过 reinterpret_cast<> 重新转换它。我的代码是否有未定义的行为?
- 用 C# 编组我的C++ .dll与 "const char*" 和 "const int"
- 为什么我的字符串(char数组)不打印
- strncpy向我的char数组添加了额外的字符
- 为什么<char>我的重载流运算符上出现 std::basic_string 段错误?
- 为什么我的 std::string 被转换为 std::basic_string<char>?
- 我很困惑为什么我的 fillDeck 函数说,"assigning to 'char *' from incompatible type 'const char *"
- 为什么我的char*会无故更改
- 为什么我的 char* 在循环中分配了一个字符串,但之后却"(null)"?编译器错误?
- 为什么我的 Char 动态数组仍然返回未初始化的值?
- 声明我的char向量数组时发生编译错误