gpt4 book ai didi

C++ 字符数组特征 : why does a string stop before the end of the array?

转载 作者:太空宇宙 更新时间:2023-11-04 15:00:12 25 4
gpt4 key购买 nike

我正在用 C++ 编写程序。其中一部分是这样的:

std::wcout << "\nEnter path to seed file: ";
char Seed_File_Path[255];//Array for the user to enter a file path
std::cin >> Seed_File_Path;

FILE *seed_file_ifp; //Creates pointer to FCB for the seed file.
seed_file_ifp = fopen(Seed_File_Path, "r"); //opens the file input stream with read permissions.

while (seed_file_ifp == NULL) {//Checks that file was found.
std::wcout << "\nFile not found. Enter a valid path and make sure file exists.\n\n";
std::wcout << "\nEnter path to seed file: ";
std::cin >> Seed_File_Path;
seed_file_ifp = fopen(Seed_File_Path, "r");
}//Ends if ifp successful

我可以输入小于数组大小的路径,并且程序按预期工作。我的问题是,为什么 fopen 能正确读取我的路径?我希望它能读入数组中的每个字符,但它只读取我输入的内容,而不是过去的内容。

我注意到的另一个特点是,我可以输入大量不是有效路径的字符(例如,rrrrrr...),然后,在程序让我再次输入路径后,我可以输入一个导致有效路径的较小字符序列(例如,“C:\file.txt”)并且 fopen 能够“正确”使用有效路径.但是,我希望它将数组中的所有字符用作字符串,其中包括有效路径以及其他先前输入的内容。

我想知道导致它“正确”工作的数组的特征,以及这是好事还是坏事。

最佳答案

当您使用 cin“输入”您的字符串时,它会自动在字符串的 n+1 元素处添加一个“\0”(n 是您的字符串的大小)。像 cout 或 fopen 这样的字符串操作函数只会读取到那个点。要测试这个理论,您可以输入一个 10 个字符长的字符串,例如,然后手动将第 11 个字符更改为其他字符。然后在第 20 个字符处手动添加 '\0' 并打印出字符串。你会得到一个 20 个字符的字符串,其中 10 到 20 个字符是乱码。

关于C++ 字符数组特征 : why does a string stop before the end of the array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50616683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com