我想扫描像
"[25, 28] => 34"
Run Code Online (Sandbox Code Playgroud)
我写了一个小程序来测试它:
#include <cstdlib>
#include <iostream>
int main() {
char* line = "[25, 28] => 34";
char a1[100], a2[100];
int i;
sscanf(line, "[%[^,], %[^\]] => %i", a1, a2, &i);
std::cout << "a1 = " << a1 <<"\na2 = " << a2 << "\ni = "<<i <<"\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译这给出了
warning: unknown escape sequence '\]'
Run Code Online (Sandbox Code Playgroud)
和输出
a1 = 25
a2 = 28
i = -1073746244
Run Code Online (Sandbox Code Playgroud)
如果我改成它
sscanf(line, "[%[^,], %[^]] => %i", a1, a2, &i);
Run Code Online (Sandbox Code Playgroud)
我没有得到编译器投诉但仍然
a1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试将对象存储在std :: set中.这些对象是来自python环境的boost :: shared_ptr <>.向集合中添加值不会导致任何麻烦.但是当我尝试擦除一个值时,即使我传递了相同的引用,它也无法工作.这是一个例子:
#include <set>
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/python.hpp>
using namespace std;
using namespace boost;
using namespace boost::python;
struct Bar
{
Bar() {}
};
struct Foo
{
set< shared_ptr<Bar> > v_set;
shared_ptr<Bar> v_ptr;
Foo() {}
void add( shared_ptr<Bar> v_param ) {
cout << "storing " << v_param << "in v_set and v_ptr" << endl;
v_set.insert(v_param);
v_ptr = v_param;
}
void del( shared_ptr<Bar> v_param ) {
cout << "deleting " << v_param << endl;
if (v_param …Run Code Online (Sandbox Code Playgroud) 我喜欢Python的Twisted和Cmd.我想一起使用它们.
我有一些工作,但到目前为止,我还没有想出如何使标签完成工作,因为我没有看到如何在Twisted的LineReceiver中立即接收Tab键盘事件(不按Enter键).
到目前为止,这是我的代码:
#!/usr/bin/env python
from cmd import Cmd
from twisted.internet import reactor
from twisted.internet.stdio import StandardIO
from twisted.protocols.basic import LineReceiver
class CommandProcessor(Cmd):
def do_EOF(self, line):
return True
class LineProcessor(LineReceiver):
from os import linesep as delimiter # makes newline work
def __init__(self):
self.processor = CommandProcessor()
self.setRawMode()
def connectionMade(self):
self.transport.write('>>> ')
def rawDataReceived(self, data):
self.processor.onecmd(data)
self.transport.write('>>> ')
StandardIO(LineProcessor())
reactor.run()
Run Code Online (Sandbox Code Playgroud)
除了标签完成,这有点起作用.我可以输入"help"之类的命令,Cmd模块将打印结果.但是我已经失去了Cmd模块的漂亮的tab-complete功能,因为Twisted一次缓冲一行.我尝试设置LineProcessor.delimiter为空字符串,无济于事.也许我需要找一些其他的Twisted而不是LineReceiver?或者也许有一种更简单的方法可以避免我必须逐个处理每个字符?
我不能单独使用Cmd,因为我想把它变成一个网络应用程序,其中一些命令将导致发送数据,并且从网络接收数据将异步发生(并显示给用户).
因此,无论我们从上面的代码开始还是完全不同的东西,我都想在Python中构建一个友好的,友好的终端应用程序,它响应网络事件和标签完成.我希望我可以使用已经存在的东西而不必自己实施太多.
所以我制作了一个从许多不同文件中收集数据的脚本:
#!/bin/bash
mkdir DATAPOOL"$1"
grep achi *out>runner
grep treat *out>>runner
cat runner | grep Primitive *gout | grep '= '|awk '{print $1,$6}' > CellVolume"$1".txt
cat runner | grep ' c ' *gout | grep 'Angstrom '|awk '{print $1,$3}' > Cellc"$1".txt
cat runner | grep 'Final energy ' *gout |awk '{print $1,$5}' > CellEnergy"$1".txt
Run Code Online (Sandbox Code Playgroud)
等等
cat runner |awk '{print "~/xtlanal",$1," > ",$1}' >runner2
vi runner2
:1,$s/gout:/xtl/
:1,$s/gout:/dat/
:wq
source runner2
grep Summary *dat | grep 'CAT-O ' |awk '{print $1,$6}' > …Run Code Online (Sandbox Code Playgroud) 我们都知道内联函数可以使调试变得更加棘手,因为它们可以从堆栈跟踪等中省略.但是假设我想从gdb中调用内联函数,并且我知道它的名称及其参数.我想我应该能够做到这一点,但我得到了这个:
Cannot evaluate function -- may be inlined
Run Code Online (Sandbox Code Playgroud)
我曾经nm在我正在使用的共享库中列出符号,并发现我想调用的函数不在那里.没什么大惊喜.我想要的是一种生成这些内联函数的可见定义的方法.我可以访问当前包含内联定义的头文件,但我无法真正修改这些头文件.也许有一些方法可以告诉编译器发出它在翻译单元中看到的所有内联函数的定义?或者其他一些技巧可以让你更容易调用和检查gdb中的内联函数的结果?
我在Linux上使用GCC 4.7.2和GDB 7.5.1.而且我无法真正切换到非优化版本,因为我正在从生产中调试核心转储(在开发中我只是关闭优化,然后事情变得更容易).
我正在尝试计算两个导入字符串(seq1和seq2,未列出的导入代码)之间的差异数量,但在运行程序时没有得到任何结果.我希望输出读取类似"2差异"的内容.不知道我哪里错了...
def difference (seq1, seq2):
count = 0
for i in seq1:
if seq1[i] != seq2[i]:
count += 1
return (count)
print (count, "differences")
Run Code Online (Sandbox Code Playgroud) boost::filesystem::create_directories(".")总是在我的系统上失败.看起来这可能是一个错误,但在阅读文档后我并不完全确定.这是一个示例程序:
#include <iostream>
#include <boost/filesystem.hpp>
int main(int argc, char* argv[])
try
{
namespace fs = boost::filesystem;
std::cerr << "is_directory: " << fs::is_directory(argv[1]) << '\n';
std::cerr << "create_directory: " << fs::create_directory(argv[1]) << '\n';
std::cerr << "create_directories: " << fs::create_directories(argv[1]) << '\n';
}
catch (const std::exception& ex)
{
std::cerr << ex.what() << '\n';
}
Run Code Online (Sandbox Code Playgroud)
如果我使用参数.(意味着当前目录)运行它,它会打印:
is_directory: 1
create_directory: 0
boost::filesystem::create_directories: Invalid argument
Run Code Online (Sandbox Code Playgroud)
前两行并不令人惊讶:.是一个目录,并create_directory()记录下来:
由于p解析为现有目录,因此创建失败不应视为错误.
但第三行对我来说是一个惊喜:create_directories(".")即使.存在也失败了.如果你使用不同的名字就没有这样的失败,比如foo- 它会愉快地创建那个目录,或者如果它已经存在则返回false.
文档有这样的说法:
效果:通过为不存在的p的任何元素调用create_directory()来建立后置条件.
后置条件:is_directory(p) …
我正在尝试使用MPI运行c ++代码(BCparallel.cpp); 用以下代码编译代码:
mpic++ BCparallel.cpp -o BCparallel
Run Code Online (Sandbox Code Playgroud)
很成功,但当我通过这条线
mpiexec -np 4 BCparallel file.txt
Run Code Online (Sandbox Code Playgroud)
它回来了
[proxy:0:0@lps-Inspiron-5537] HYDU_create_process
(utils/launch/launch.c:75): execvp error on file BCparallel (No such
file or directory)
[proxy:0:0@lps-Inspiron-5537] HYDU_create_process
(utils/launch/launch.c:75): execvp error on file BCparallel (No such
file or directory)
[proxy:0:0@lps-Inspiron-5537] HYDU_create_process
(utils/launch/launch.c:75): execvp error on file BCparallel (No such
file or directory)
[proxy:0:0@lps-Inspiron-5537] HYDU_create_process
(utils/launch/launch.c:75): execvp error on file BCparallel (No such
file or directory)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
考虑这个简单的程序:
#include <string>
#include <sparsehash/dense_hash_map>
int main()
{
google::dense_hash_map<std::string, int> map;
map["foo"] = 0;
}
Run Code Online (Sandbox Code Playgroud)
使用GCC 8.2和-Wclass-memaccess(或-Wall)进行编译会产生警告:
sparsehash/internal/libc_allocator_with_realloc.h:68:40: warning:
‘void* realloc(void*, size_t)’ moving an object of non-trivially copyable type
‘struct std::pair<const std::__cxx11::basic_string<char>, int>’;
use ‘new’ and ‘delete’ instead [-Wclass-memaccess]
return static_cast<pointer>(realloc(p, n * sizeof(value_type)));
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
问题是:
我在这里提出了一个问题:https://github.com/sparsehash/sparsehash/issues/149
我有一个CMakeLists.txt可以做到这一点:
get_target_property(myloc mytarget LOCATION)
Run Code Online (Sandbox Code Playgroud)
它曾经可以正常工作,但是不建议使用CMake 3.0 LOCATION(请参阅https://cmake.org/cmake/help/v3.0/policy/CMP0026.html)。所以我尝试使用生成器表达式:
set(myloc $<TARGET_FILE:mytarget>)
Run Code Online (Sandbox Code Playgroud)
这似乎是可行的,除了生成器表达式不是在任何地方都被求值,它们似乎仅在设置其他目标的属性时起作用,并且在“生成”步骤而不是之前的“配置”步骤中得到解析。问题是,我需要知道install()规则中的目标位置,如下所示(实际用途并不重要,strip但这无关紧要):
install(CODE "execute_process(COMMAND strip ${myloc})")
Run Code Online (Sandbox Code Playgroud)
使用时可以很好地工作,LOCATION但是现在已经过时了,我想不通正确的方法。问题的根源似乎install()是在目标路径未知时在“配置”步骤中调用的。
如何在调用之前弥合这一差距,并像以前一样发现目标输出路径install()?