小编Abh*_*eet的帖子

"printf"在Windows非控制台应用程序中写入的位置?

如果我选择创建一个Windows非控制台应用程序,并printf\cout在代码中实现,那么printf\cout写在哪里?它写入stdout缓冲区吗?如果是的话,无论如何都要从中读取它stdout并将其打印到某个文本文件中或者MessageBox使用文本进行读取(只是为了验证我是否正确读取了它)?

编辑::只是为了澄清我不想将输出重定向到任何地方.我想知道,printf/cout写在哪里?如果它写入某个默认缓冲区,是否有办法读取输出,只是为了验证我已经从正确的缓冲区读取了正确的输出.请不要给我重定向"stdout"的解决方案.

c c++ winapi stdout visual-c++

19
推荐指数
2
解决办法
7731
查看次数

以伪随机顺序迭代列表而不存储混洗列表

游戏中,我们使用一种称为" 颜色选择 " 的技术来选择单位.

这意味着每个可见单元都具有独特的颜色.

以下是为颜色拾取绘制的场景示例:

在此输入图像描述

由于某些用户可能具有16位显示器,因此这些颜色可以在0..64K范围内.

但是,如果我们给单位增量颜色,例如unit0为0,则unitN为N,那么人类调试的颜色非常难.单位几乎无法区分.

我们希望为这些单位提供独特而独特的色彩.

我们目前正在使用二叉树(C++ map)以固定步骤递增以存储用过的颜色以检查冲突.这是低端硬件上的性能问题.即使这是一个哈希表并且避免使用string,游戏帧中的临时内存分配也是不受欢迎的.因此,我很想发现是否有办法避免完全保留历史,而不是优化代码.

有没有办法用大步骤或随机迭代数字0..64K,以便使用大多数64K可能的值,并避免使用已分配颜色的历史来避免冲突?

(屏幕上不可能有超过64K的可见单元,我们不必处理这种情况!)

c++ random

8
推荐指数
1
解决办法
403
查看次数

如何从time_t中提取小时数?

我想从表示纪元以来的秒数的time_t值中提取小时,分钟和秒作为整数值.

小时值不正确.为什么?

#include <stdio.h>
#include <time.h>

#include <unistd.h>

int main()
{
    char buf[64];

    while (1) {
        time_t t = time(NULL);
        struct tm *tmp = gmtime(&t);

        int h = (t / 360) % 24;  /* ### My problem. */
        int m = (t / 60) % 60;
        int s = t % 60;

        printf("%02d:%02d:%02d\n", h, m, s);

        /* For reference, extracts the correct values. */
        strftime(buf, sizeof(buf), "%H:%M:%S\n", tmp);
        puts(buf);
        sleep(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出(小时应为10)

06:15:35
10:15:35

06:15:36
10:15:36

06:15:37
10:15:37
Run Code Online (Sandbox Code Playgroud)

c time time-t

7
推荐指数
2
解决办法
2万
查看次数

如何只替换CString中第一次出现的字符?

我有一个CString st= $/Abc/cda/($/dba/abc)/.我想替换的只有第一次出现$c:\.

我试图替换为

st.Replace("$","c:\");
Run Code Online (Sandbox Code Playgroud)

但它取代了所有的发生$.

能否请你建议我只替换第一次出现的角色.

c++ mfc stl visual-c++

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

while(*指针)在C中的含义是什么?

当我最近看一些关于C指针的段落时,我发现了一些有趣的东西.它说的是这样的代码:

char var[10];
char *pointer = &var;
while(*pointer!='\0'){
    //Something To loop
}
Run Code Online (Sandbox Code Playgroud)

可以变成这个:

//While Loop Part:
while(*pointer){
    //Something to Loop
}
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,*指针是什么意思?

c pointers loops

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

如何从使用 ASN1 编码的数字签名 PE 文件的 Authenticode 中提取签名者信息?

我需要SignerInfoAuthenticodeASN1 结构中的数字签名 PE 文件中提取。

INFO:PE 文件包含由Security Directory RVAinside指定的偏移量处的验证码Optional Header Data Directories。我曾尝试在阅读Microsoft Authenticode PE 签名格式提供的文档后开始,但没有运气,因为我对 SSL/TSL 非常陌生。

我的问题:

  1. 有没有办法解析二进制文件并以 C 字符串格式打印数据结构?

  2. 有什么方法可以解析给定的二进制文件并指向SignerInfoor SignerName

NOTE:我不想使用任何平台相关的 API,因为我希望代码与平台无关。

提前感谢所有大师:-)

UPDATE:我在 C# 中找到了一个代码。有人能帮我找到相同的 C 语言吗?

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography.X509Certificates;

public class CertInfo
{
 public static void Main(String[] args)
 {
    byte[] certBytes;
    X509Certificate x509cert;

    while (true)
    {
        Console.WriteLine("\nEnter File Name: ");
        String filename = Console.ReadLine();
        if …
Run Code Online (Sandbox Code Playgroud)

c asn.1 authenticode x509certificate x509

5
推荐指数
0
解决办法
2063
查看次数

从数组中找到n个最大的元素

我有一个数组

A[4]={4,5,9,1}
Run Code Online (Sandbox Code Playgroud)

我需要它可以给出前3个顶级元素,例如9,5,4

我知道如何找到最大元素,但如何找到第二和第三最大?

即如果

max=A[0]
for(i=1;i<4;i++)
{
  if (A[i]>max)
  {
    max=A[i];
    location=i+1;
  }
}
Run Code Online (Sandbox Code Playgroud)

实际排序不适合我的应用程序,因为,

位置编号对我来说也很重要,即我必须知道前三个最大值出现在哪个位置,在这里是第0,第1和第2个位置...所以我在考虑一个逻辑

在获得最大值之后,如果我可以在该位置放置0并可以对该新数组应用相同的步骤,即{4,5,0,1}

但是我有点困惑如何将我的逻辑写入代码

c

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

VC++中未解决的外部错误

我正在学习vc ++并使用代码检查内存的使用信息.这个程序给了我三个未解决的外部错误..

error LNK2019: unresolved external symbol _GetProcessMemoryInfo@12 referenced 
in function "void __cdecl PrintMemoryInfo(unsigned long)" 
(?PrintMemoryInfo@@YAXK@Z)

error LNK2019: unresolved external symbol _EnumProcesses@12 referenced in 
function _main

error LNK1120: 2 unresolved externals.
Run Code Online (Sandbox Code Playgroud)

码::

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <psapi.h>

// To ensure correct resolution of symbols, add Psapi.lib to TARGETLIBS
// and compile with -DPSAPI_VERSION=1

void PrintMemoryInfo( DWORD processID )
{
    HANDLE hProcess;
    PROCESS_MEMORY_COUNTERS pmc;

    // Print the process identifier.

    printf( "\nProcess ID: %u\n", processID );

    // Print information …
Run Code Online (Sandbox Code Playgroud)

c++ unresolved-external lnk2019 visual-c++

5
推荐指数
2
解决办法
3115
查看次数

有没有办法确保不同操作系统中浮点的输出相同?

这是我的代码:

int a = 0x451998a0;
float b = *((float *)&a);
printf("coverto float: %f, %.10lf\n", b, b);
Run Code Online (Sandbox Code Playgroud)

在Windows中输出是:

coverto float: 2457.539063, 2457.5390625000
Run Code Online (Sandbox Code Playgroud)

在linux中,输出是:

coverto float: 2457.539062, 2457.5390625000
Run Code Online (Sandbox Code Playgroud)

有没有办法确保输出相同?

c++ linux windows floating-point io

4
推荐指数
1
解决办法
244
查看次数

如果其中一个进程意外死亡,进程间内存会发生什么?

如果你对动机感兴趣我会在接下来的几句中详细阐述它,如果不是只是跳到Q.

我正在考虑制作快速记录器但是在程序崩溃时没有受到影响的记录器(也就是少数最后一次记录消息没有丢失).所以我的想法是写入共享内存(ringbuffer)并从中读取另一个低prio进程并进行转储.但为了工作,我需要知道如果一个进程退出(正常退出,SEGFAULT)共享内存会发生什么...

所以我的问题是:当其中一个触发器死掉时,共享内存会发生什么(在Linux中,但你也可以在A中获胜)是UB吗?

c++ linux shared-memory

4
推荐指数
1
解决办法
3412
查看次数