小编Sha*_*Guy的帖子

这个C++ 11正则表达式错误我或编译器?

好吧,这不是我遇到这个问题的原始程序,但是我把它复制得更小了.非常简单的问题.

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,也不 …

c++ regex gcc c++11

54
推荐指数
3
解决办法
5万
查看次数

ASP Classic使用什么版本的JavaScript?

我见过的用于识别JavaScript版本的黑客都是针对浏览器量身定制的,而不是运行JavaScript的ASP Classic服务器.

(不,我没有选择运行ASP Classic/JavaScript.)

javascript asp-classic

6
推荐指数
1
解决办法
1011
查看次数

如何使用星号等在命令行Java程序中屏蔽密码?

用于从命令行读取密码而不显示密码的标准JVM方法java.io.Console.readPassword().但是,这在用户输入时没有显示任何内容; 习惯于图形程序的用户会希望出现"•"或"*"等符号来代替他们输入的字符.当然,他们也希望退格,插入等正常工作,只需将所有操作的角色替换为相同的符号即可.

在2019年,当用户在控制台应用程序中键入"hunter2"时,是否有一个普遍接受的JVM程序用于显示"*******"?没有GUI,这甚至可以正常完成吗?关于该主题的2011年SO问题得到了一个答案,链接到关于该主题的这篇文章 ; 我们现在能比其中所示的相当精细的解决方案做得更好吗?

(我碰巧使用Kotlin作为我选择的语言,因此如果有Kotlin特定的解决方案将会满足.)

java passwords console-application command-line-interface

5
推荐指数
1
解决办法
334
查看次数

不能从istringstream(C++)获取getline()

我有一个先前声明的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错误?

c++ string iostream stringstream

3
推荐指数
1
解决办法
2595
查看次数

共享内存中的队列起作用

共享内存给我带来了困难,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++ gcc gdb ipc shared-memory

0
推荐指数
1
解决办法
1049
查看次数