C ++ bool行为不符合预期[重复]
Posted
技术标签:
【中文标题】C ++ bool行为不符合预期[重复]【英文标题】:C++ bool behaviours not as expected [duplicate] 【发布时间】:2021-05-31 17:36:45 【问题描述】:我在 C++ 中对反向布尔值有一些奇怪的问题。 :')
我想检查传递给 main 方法的参数是否不是“file.txt”。如果不是,我想创建一个名称作为主要参数的新文件,并在那里写入随机数据行。否则我想从“file.txt”中读取数据。
一切都如我所愿,但是当我输入
g++ sourcefile.cpp header.h
在终端中,然后
./a.out file.txt
程序将这些随机数据输入到“file.txt”中,而不是从中读取。
另一方面,当我输入:
./a.out someRandomData.txt
它正在从“file.txt”中读取。有什么想法吗?
int main(int argc, char* argv[])
if(argv[1] != "file.txt")
fileWithRandomData(argv[1]);
else
std::vector<std::string> row;
std::string line, word, temp;
std::ifstream MyReadFile(argv[1]);
(...)
这是我的 fileWithRandomData 函数的示例:
void fileWithRandomData(string name)
srand(time(NULL));
std::ofstream MyFile(name);
int metalsNumber = rand() % 5000 + 1; //first line -> number of available metals.
(...)
【问题讨论】:
argv[1] != "file.txt"
永远不会是假的。
您使用的是 C++?请直接将参数转换为 std::string_view 或 std::string,并始终确保您确实传递了正在检查的参数(例如,不带参数调用将超出范围访问)。更好的是,使用一个处理命令行接口的好库:)
【参考方案1】:
您需要比较两个 C 字符串,而不是比较它们的存储地址。
那就是写
#include <cstring>
//...
if( strcmp( argv[1], "file.txt" ) != 0 )
否则在这个 if 语句中
if(argv[1] != "file.txt")
比较两个指针:argv[1]
和指向字符串文字第一个字符的指针"file.txt"
。
由于字符串占用不同的内存范围,if 语句的条件将始终为真。
【讨论】:
以上是关于C ++ bool行为不符合预期[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 MIN() 和 GROUP BY [重复] 时,SQL SELECT 的行为不符合预期
带有指针值的 Go 通道在 for 循环中的行为不符合预期[重复]