为什么 strpbrk() 找不到字符?
Why doesn't strpbrk() find a character?
char operators[] = "+-*/^(";
char* input = new char[100];
char* output = new char[100];
char* operadores = new char[100];
char* pch = input;
char* pch2 = input;
cout << "Expresion: " <<endl; cin.getline(input,100);
cout << input <<endl;
pch2 = strpbrk (pch2, operators);
pch = strtok (pch, "+-*/^(");
while (pch != NULL){
strcat (output, pch);
pch = strtok (NULL, "+-*/^(");
strcat (operadores, pch2);
}
cout << "Salida: " << output <<endl;
cout << "Operadores: " << operadores <<endl;
cout << "Entrada: " << input <<endl;
cout << "pch2 = " << pch2 <<endl;
我的问题是函数strpbrk()
不起作用。它不会返回NULL;我已经证明了。但是我需要一个char
放到堆栈中,而cout
没有显示pch2
指向的字符。
你把自己弄糊涂了——这个程序就是用来弄糊涂的。
你有pch
和pch2
指向同一个输入字符串- input
。调用strpbrk()
来找到其中一个运算符,并将该位置保存在pch2
中。然后在pch
上调用strtok()
,它会找到strpbrk()
刚刚找到的字符,并在它上面写一个NUL ' '
。因此,pch2
似乎指向字符串末尾的NUL。然后在循环体中,将pch2
所指向的空字符串连接到目标操作符列表中。
我个人避免使用strtok()
,因为它会混淆输入字符串。如果你要使用它,你可能需要处理一个字符串的副本,因为strtok()
在它上面写NUL字节。
最后的诊断输出应该只显示输入的第一部分——直到第一个操作符。
小心在标准库函数或编译器"不工作"时强制转换诽谤。这是新手的标志;99.9999%的情况下,这是用户错误,而不是系统错误。在那些非常、非常、非常罕见的情况下,你是正确的(哦,看,我刚刚赢得了我的第三个百万彩票奖金;(尽管我不买彩票),你描述问题的方式是不同的。你把这个问题描述为一个完全令人惊讶的问题;您记录了工作测试用例;然后你解释你发现的边缘情况应该如何工作以及结果——你仍然不确定这是代码中的错误还是系统中的错误。
正如其他人诊断的那样,您没有将operadores
初始化为空字符串,因此连接到它会导致未定义的行为。
真的没有必要分配100字节的字符串:
char input[100]; // Cleaner, simpler, more reliable
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- "assimp/config.h"找不到,但它在文件夹中
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 找不到如何创建使用指针、字符和 for 函数组合的程序
- std::转换为常量字符 * 的字符串在 std::unordered_set<const 字符 * 中找不到>
- 如何使该程序在数组中打印搜索字符的索引,否则将找不到它
- 错误:我的程序中杂散的"\342",但我找不到坏字符
- 为什么 strpbrk() 找不到字符?