接受C ++字符串和C样式字符串的generics类

如您所知:C样式字符串是一个以“null”结尾的字符数组 C ++样式字符串是: string s = “Some text”; 所以要接受C ++字符串和C样式字符串,我很确定我必须使用C ++模板。 我正在尝试编写一个类和一个方法,它返回C ++或C样式字符串的字符串的第二个字符。 我是在正确的轨道上吗? template class mystring { T pointer; public: mystring(T input) { pointer = input } char getSecondLetter() { T temp = pointer; temp++; return temp; } }; int main () { mystring myobject(“HELLO”); cout << myobject.getSecondLetter(); return 0; } ps程序员总是使用’​​T’作为模板类数据类型吗?

为什么mpirun不尊重我选择的BTL?

我在Windows 7机器上使用Cygwin上的Open MPI(1.8.3)。 我想在这台机器上独占运行MPI代码,而无需在任何外部网络上进行通信。 我知道我应该能够使用MCA选项将mpirun限制为自我和共享内存通信,如下所示: mpirun -n 8 –mca btl sm,self ./hello.exe 但是,当我尝试这个时,Windows会问我是否要设置防火墙例外,这表明我的工作是尝试通过TCP进行外部通信。 此外,mpirun将在完成前大约一分钟挂起,并且只有在hello world job完成之前我在无线网络上。 如果我关闭无线网卡或切换到有线以太网连接,它会在预期的大约一秒钟内完成。 为什么mpirun没有观察我选择的BTL?

使用getchar立即检索击键

我正在尝试使用getchar()从键盘一次检索1次击键。 虽然它这样做,我遇到的问题是不立即发送它,它等待按下回车键然后它从缓冲区一次读取1个字符。 int main(){ char c = getchar(); putchar(c); return 0; } 当从键盘按下时,如何立即读取每次击键? 谢谢

读取进程内存

我正在尝试从进程中读取内存(calc.exe)。 但是我打的是“无法读取内存”的消息。 我的错误在哪里? int main() { HWND handle = FindWindow(0, TEXT(“Calculadora”)); if (!handle) { msg(“Could not find window”); return 0; } DWORD id; GetWindowThreadProcessId(handle, &id); HANDLE proc = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, id); if (!proc) { msg(“Could not open process”); return 0; } char buffer[128]; if (ReadProcessMemory(proc, 0, &buffer, 128, NULL)) { msg(“yes!!”); […]

我是否有sizeof(type)== sizeof(无符号类型)的保证?

sizeof char,int,long double ……可能因编译器而异。 但是,根据C ++ 11或C11标准,我是否有任何有符号和无符号基本积分类型的大小相同的保证?

如何使用putchar打印浮点值?

我正在研究嵌入式应用程序,需要打印浮点值。 由于空间和其他限制,我只能使用putchar()进行输出。 我正在尝试创建一个函数,它将float作为参数并使用putchar()进行打印。 我有一个类似的函数适用于整数值。 void putLong(long x) { if(x = 10) { putLong(x / 10); } putchar(x % 10+’0′); } 我怎么能为浮子做类似的function?

堆栈内存使用算术和递归函数调用

我关心的是在涉及算术和递归函数调用的指令中将使用堆栈内存,例如: return 5 + f(a-1); //f is recursive 我想了解什么放在堆栈上,什么时候,以便我知道在深度递归的情况下什么可能或不可能导致内存问题。 这是一个更完整的例子: int f(int a) { if (a > 0) { return 5 + f(a-1); } else { return 0; } } 让我们关注线路return 5 + f(a-1); 在这一点上我们将在内存中存储什么? 我们在堆栈中有一个整数a的位置,因为变量是f的本地变量 是否会存储值5和1? 操作a-1的结果怎么样,它会被放到堆栈上? f的返回值怎么样? 关于所使用的内存量的“最坏情况”场景将是在某些时候所有这些将同时在堆栈上。 更好的情况是,将按顺序分配和解除分配,以便不是所有内容都保存在内存中。 怎么会发生? 是由编译器决定的吗? 非常感谢,

X11等待并获取剪贴板文本

我必须监控X11剪贴板。 目前,我每5秒请求一次ClipBoard选择,然后我对从剪贴板返回的文本进行哈希处理,并将其与上次检查中的哈希计算进行比较。 如果哈希不一样,我分析文本内容并做一些事情…… 我不喜欢我的方法。 我来自Windows,并且使用winapi,它是内核,当剪贴板发生变化时会通知你的程序,并且效率更高! 我只是想知道当剪贴板发生变化时,X11是否可以将您的程序通知为winapi? 使用X11检查剪贴板修改的更有效方法是什么?

简单链接列表 – 无法访问节点

我正在尝试构建一个简单的链接列表但是我收到编译错误告诉我我正在尝试访问的链接列表节点不包含我期望它的字段。 这些是我的链接列表方法: typedef struct TinCan { int label; } TinCan; typedef struct LinkedListNode { TinCan *data; struct LinkedListNode *next; } LinkedListNode; typedef struct LinkedList { LinkedListNode *head; } LinkedList; LinkedList* createList() /*creates empty linked list*/ { LinkedList* myList; myList = (LinkedList*)malloc(sizeof(LinkedList)); myList->head = NULL; } 我malloc一个结构并将其发送到列表,如下所示: LinkedList* canQueue=createList(); TinCan* testCan = (TinCan*) malloc(sizeof(TinCan)); testProc->pid=69; insertLast(canQueue, […]

无法访问内存 – gdb

这是我的disas代码: Dump of assembler code for function main: 0x00000000000006b0 : push %rbp 0x00000000000006b1 : mov %rsp,%rbp 0x00000000000006b4 : sub $0x10,%rsp 0x00000000000006b8 : movl $0xa,-0xc(%rbp) 0x00000000000006bf : lea -0xc(%rbp),%rax 0x00000000000006c3 : mov %rax,-0x8(%rbp) 0x00000000000006c7 : lea 0x96(%rip),%rdi # 0x764 0x00000000000006ce : mov $0x0,%eax 0x00000000000006d3 : callq 0x560 0x00000000000006d8 : mov $0x0,%eax 0x00000000000006dd : leaveq 0x00000000000006de : […]