好吧,这不是我遇到这个问题的原始程序,但是我把它复制得更小了.非常简单的问题.
main.cpp中:
#include <iostream>
#include <regex>
using namespace std;
int main()
{
regex r1("S");
printf("S works.\n");
regex r2(".");
printf(". works.\n");
regex r3(".+");
printf(".+ works.\n");
regex r4("[0-9]");
printf("[0-9] works.\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用此命令成功编译,没有错误消息:
$ g++ -std=c++0x main.cpp
Run Code Online (Sandbox Code Playgroud)
g++ -v顺便说一下,最后一行是:
gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时的结果:
$ ./a.out
S works.
. works.
.+ works.
terminate called after throwing an instance of 'std::regex_error'
what(): regex_error
Aborted
Run Code Online (Sandbox Code Playgroud)
如果我将r4更改为,,或者\\s,它会以相同的方式发生.这是编译器的问题吗?我或许可以相信C++ 11的正则表达式引擎有不同的方式来表达"空白"或"单词字符",但方括号不起作用是一个延伸.它是否已在4.6.2中得到修复?\\w[a-z]
编辑:
约阿希姆Pileborg已提供的部分解决方案,使用额外的regex_constants参数,以使支撑方括号语法,但既不basic,extended,awk,也不 …
我见过的用于识别JavaScript版本的黑客都是针对浏览器量身定制的,而不是运行JavaScript的ASP Classic服务器.
(不,我没有选择运行ASP Classic/JavaScript.)
用于从命令行读取密码而不显示密码的标准JVM方法java.io.Console.readPassword().但是,这在用户输入时没有显示任何内容; 习惯于图形程序的用户会希望出现"•"或"*"等符号来代替他们输入的字符.当然,他们也希望退格,插入等正常工作,只需将所有操作的角色替换为相同的符号即可.
在2019年,当用户在控制台应用程序中键入"hunter2"时,是否有一个普遍接受的JVM程序用于显示"*******"?没有GUI,这甚至可以正常完成吗?关于该主题的2011年SO问题得到了一个答案,链接到关于该主题的这篇文章 ; 我们现在能比其中所示的相当精细的解决方案做得更好吗?
(我碰巧使用Kotlin作为我选择的语言,因此如果有Kotlin特定的解决方案将会满足.)
我有一个先前声明的char c[64];,我正在尝试查看管道输出的第一个字:
read(pipe_replacement_to_main[READ_END], c, BUF_SIZE);
istringstream response_stream(string(c));
string response_string;
getline(response_stream, response_string, ' ');
Run Code Online (Sandbox Code Playgroud)
gcc在第四行给了我以下内容:
error: no matching function for call to ‘getline(std::istringstream (&)(std::string), std::string&, char)’
Run Code Online (Sandbox Code Playgroud)
我甚至无法弄清楚它是如何调用该函数的.我是否声明了istringstream错误?
共享内存给我带来了困难,GDB没有太多帮助.我已经分配了32KB的共享内存,并且我曾经shmat将它转换为指向struct包含A)a bool和B的对象的队列,包含一个std::string,三个ints和一个对象的队列bool,以及各种方法.(我不知道这个俄罗斯套娃结构是否应该如何做,但这是我所知道的唯一方法.使用消息队列不是一种选择,我需要使用多个进程.)
将一个对象推入队列可以正常工作,但是当我尝试推送一个对象时,程序会冻结.没有错误消息,没有任何消息.是什么导致了这个?我怀疑这是缺乏记忆,但如果是,我需要多少钱?
编辑:如果我不清楚 - 队列中的对象是一个类,其中描述了五个数据成员.
编辑2:我更改了队列的条目类,以便它不使用std::string.(令人尴尬的是,我能够用原语表示数据.)程序仍然在第二次推送()时冻结.
编辑3:我尝试front()在第一个队列之后立即从同一个队列中调用push(),它也冻结了程序.但是,检查队列bool 外部的值是否正常,因此队列本身有问题.
EDIT 4:作为实验,我加入std::queue<int>到struct我使用的共享存储器.它显示了相同的行为 - push()工作一次,然后front()冻结.所以我用于队列项的类也不是问题.
这个问题表明我不太可能解决这个问题std::queue.是这样吗?我应该boost像它说的那样使用吗?(就我而言,我正在执行shmget()并shmat()在父进程中尝试让两个子进程进行通信,因此它略有不同.)
编辑5:其他子进程在调用时也会冻结front().信号量确保在第一次push()调用后发生这种情况.
c++ ×3
gcc ×2
asp-classic ×1
c++11 ×1
gdb ×1
iostream ×1
ipc ×1
java ×1
javascript ×1
passwords ×1
regex ×1
string ×1
stringstream ×1