if(!buydat.empty()) 验证失败(始终为 true)
if(!buydat.empty()) validation fails (always true)
我有一个始终正确的"如果验证",即使我删除它正在接收的入站数据以确保它是空的,我仍然会在不应该的时候到达我的 cout 语句。
法典:
void buymngr(){
vector<std::string> buydat;
vector<std::string> markdat;
vector<std::string> pricedat;
buydat = getmyData();
if(!buydat.empty()){
cout << "You 'do' have buy string match data!" << endl;
}
它调用负责获取数据的函数getmyData
获取我的数据:
vector<string> getmyData()
{
FILE *mydfp = popen("php getMyorders.php", "r");
if (mydfp == NULL) perror ("Error opening file");
char mydbuff[BUFSIZ];
vector<string> vrecords;
while(fgets(mydbuff, sizeof(mydbuff), mydfp) != NULL){
size_t n = strlen(mydbuff);
//clean ' ' from fgets
if (n && mydbuff[n - 1] == 'n') mydbuff[n - 1] = ' ';
if (mydbuff[0] != ' ') vrecords.push_back(mydbuff);
}
cout << "I got my own data" << endl;
return vrecords;
}
当代码合法地"true"时,它运行良好并正常执行所有功能。但是当变为 false 时,它仍然验证 true 然后分段错误(gdb 不指向特定行,但错误确实似乎试图处理实际上不存在的有效数据(。
您的if
语句检查该b < buydat.size()
。 您可以使用以下语句在向量末尾之外进行索引:
if ( buydat[b] == "Buy" ){
pricedat.push_back(buydat[b+1]);
}
编辑:我所说的"你可以索引......"是什么意思。是"您可能正在索引..."。
这是一个观察,而不是一个建议:您正在向pricedat
向量添加buydat[b+1]
。 如果您的测试(b == (buydat.size()-1))
,您将push_back(buydat[buydat.size()]
- 无效。 您发布的代码没有任何测试来确保buydat.size()
小于 b+N
(无论N
是什么 - 我根据您的for
循环猜测 7
评论太长了,所以跟进作为答案:那么你的问题就出在getMyData()
. 考虑:
#include <vector>
#include <string>
std::vector<std::string> getmyData()
{
std::vector<std::string> vrecords;
vrecords.push_back("anything.");
vrecords.push_back("anything 2.");
// push some more data here so the result -looks- like
// whatever you expect the output of your PHP to be.
// also, your original version of this function never closes mydfp
return vrecords;
}
void buymngr(){
std::vector<std::string> buydat;
std::vector<std::string> markdat;
std::vector<std::string> pricedat;
buydat = getmyData();
if(!buydat.empty()){
std::cout << "You 'do' have buy string match data!" << std::endl;
}
}
int main()
{
buymngr();
return 0;
}
检查getMyorders.php
的输出 - 如果输出错误,那么,这就是您的问题。 如果没有,请发布 getMyOrders.php
的输出。
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 无论条件是否为true,if总是在c++中执行
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- 如何让LLDB在成功时退出,在失败时等待
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 测试用例状态为失败,但返回的值为 true
- if(!buydat.empty()) 验证失败(始终为 true)