小编Jab*_*cky的帖子

无法使用CreateProcess重定向标准输出

我正在维护一个MFC程序,我正在启动一个简单的Win32控制台程序(只是一个"Hello World"程序,下面的源代码),CreateProcess我无法将该程序的标准输出重定向到一个文件.

这是启动代码,不用担心Fatal功能,它只显示一条消息并中止程序,这只是测试代码.

  HANDLE hfile = CreateFile("output.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

  if (hfile == INVALID_HANDLE_VALUE)
  {
    Fatal("Fatal error: CreateFile");
  }

  static const char TestText[] = "Test\r\n";
  DWORD written;
  if (!WriteFile(hfile, "Test\r\n", sizeof(TestText) - 1, &written, NULL))
  {
    Fatal("Fatal error: CreateProcess");
  }

  STARTUPINFO startupinfo = {0};
  startupinfo.cb = sizeof(STARTUPINFO);
  startupinfo.lpTitle = "Some Title";
  startupinfo.dwFlags = STARTF_USESTDHANDLES;
  startupinfo.hStdOutput = hfile; 

  PROCESS_INFORMATION processInfo;

  if (!CreateProcess("S:\\Git\\TestRedirect\\TestConsole1\\Debug\\TestConsole1.exe", "cmdline", NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &startupinfo, &processInfo))
  {
    Fatal("Fatal error: …
Run Code Online (Sandbox Code Playgroud)

c c++ winapi mfc

2
推荐指数
1
解决办法
419
查看次数

从函数返回的数组值错误

我正在制作这个程序,其中我的main函数调用一个函数,该函数在计算后返回一个数组.我已经检查过计算是否在本地函数内部.但是当我将该数组返回到'main'函数时,我只能打印一次正确的值,并且在其他时间打印错误的值.

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
int* getJoinedPipes(int input1_size, int* input1,int* output_size){
  int i,j,temp;
  int op1[input1_size-1];
  *output_size = input1_size - 1;
  for(i=0; i<input1_size; i++){
    for(j=i+1; j<input1_size; j++){
      if(input1[i] > input1[j]){
        temp     = input1[i];
        input1[i] = input1[j];
        input1[j] = temp;
      }
    }
  }

  op1[0]=input1[0] + input1[1];
  for(i=1;i<input1_size-1;i++){
    op1[i] = op1[i-1]+input1[i+1];
  }
  //printf("%d\n",op1[2]);

  return op1; 
}

int main() {
  int output_size;
  int* output;

  int ip1_size = 0;
  int ip1_i;
  scanf("%d\n", &ip1_size);
  int ip1[ip1_size]; …
Run Code Online (Sandbox Code Playgroud)

c arrays

2
推荐指数
1
解决办法
438
查看次数

即使控件具有焦点,焦点矩形也不显示

我在 MFC 应用程序中遇到以下问题:

控件中的焦点矩形并不总是显示出来,即使控件具有焦点。

重现步骤:

  • 启动应用程序
  • 点击控件
  • 未显示焦点矩形: 在此处输入图片说明
  • 使用 Alt-Tab 切换到另一个应用程序
  • 切换回我的应用程序
  • 点击控件
  • 现在焦点矩形按预期显示: 在此处输入图片说明
  • 从现在开始,控件上的焦点矩形在获得焦点时会正确显示。

这就像有两种“模式”,一种是显示焦点矩形,另一种是不显示焦点矩形。

其他事实:

  • 控件确实具有焦点,因为使用向上/向下箭头键可以更改所选项目
  • 它在 Windows 10 上运行
  • 当我们处于未显示焦点矩形的“模式”时,程序的行为保持正确。

有没有人遇到过这样的问题?我想知道这是否是一些“聪明的”微软​​功能。

winapi mfc

2
推荐指数
1
解决办法
697
查看次数

如何使用 ULARGE_INTEGER 进行算术运算

我有一个应用程序,我不断检查磁盘空间并将其与特定值进行比较。现在磁盘空间计算如下:

ULARGE_INTEGER p1;
ULARGE_INTEGER p2;
ULARGE_INTEGER p3;
GetDiskFreeSpaceEx(".", &p1, &p2, &p3); 
Run Code Online (Sandbox Code Playgroud)

现在从上面的方法我得到了变量 p3 中的可用空间。现在我如何将它与一个正常的整数值进行比较(算术运算)。此外,此代码必须在 32 位和 64 位平台上工作。或者如果有任何其他选项来计算可用磁盘空间?谢谢

c c++ windows winapi

2
推荐指数
1
解决办法
1000
查看次数

char 指针中怎么能包含字符串呢?

如果我在 C 程序中定义一个 char 指针并将其初始化为“某个字符串”

有人可以解释一下应该在其中保存地址的 char 指针如何在其中保存字符串吗?

这不是和指针的定义矛盾吗?我在这里缺少什么?

例如 :

char pointer=" how is it possible at all ? ";
printf("%s",pointer);
Run Code Online (Sandbox Code Playgroud)

c

2
推荐指数
1
解决办法
2174
查看次数

为什么在C99中不允许隐式声明gets()?

我开始学习C语言编程,这是我所指代的代码,其中显示了一些源代码,gets()而我的IDLE也认识到它。但是仍然在编译时,我的编译器不同意它。

谁能帮我吗?我gets()在main函数中使用clang作为编译器。

c gets c99 clang cs50

2
推荐指数
1
解决办法
5213
查看次数

关于“ Microsoft Visual C ++ 2015 Redistributable”的安装Visual Studio 2015的错误

从我的大学门户网站(vs_communityENUS.exe,这是一个3260 KB的应用程序)进行此简单的Visual Studio 2015安装过程以来,我一直呆了两天。我对安装和故障排除并不陌生,但这使我发疯。

每次安装它都会引发错误:

  1. Microsoft Visual C ++ 2015可再发行组件(x64)-14.0.23918:已安装此产品的另一个版本。无法继续安装此版本。要配置或删除该产品的现有版本,请使用“控制面板”中的“添加/删除程序”。

  2. Visual Studio 2015更新3 Microsoft Visual C ++ 2015可再发行组件(x64)-14.0.24210:安装程序失败。已经安装了该产品的另一个版本。无法继续安装此版本。要配置或删除该产品的现有版本,请使用“控制面板”中的“添加/删除程序”。错误代码:0x80070666

  3. Visual Studio 2015更新3 Microsoft Visual C ++ 2015可再发行组件(x86)-14.0.24210:安装程序失败。已经安装了该产品的另一个版本。无法继续安装此版本。要配置或删除该产品的现有版本,请使用“控制面板”中的“添加/删除程序”。错误代码:0x80070666

  4. Microsoft Visual C ++ 2015可再发行组件(x86)-14.0.23918:已安装此产品的另一个版本。无法继续安装此版本。要配置或删除该产品的现有版本,请使用“控制面板”中的“添加/删除程序”。

我检查了控制面板,但没有找到具有上述名称的任何文件。然后,我得到了一个了不起的链接,该链接帮助我删除了计算机上装有的Visual Studio的任何先前版本,但是在此之后进行的全新安装也引发了相同的错误。

我很难过,我想要的是一个与Windows 8.1兼容的简单Visual Studio版本,并且可以与opencv,qt和vtk成功集成。

在这方面的任何帮助均受到高度赞赏和赞赏。

c++ error-handling install visual-studio-2015

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

确定流程是否与系统相关

我有一个HANDLE进程,想知道该进程是否与系统相关,就像下图中的任务管理器所做的那样。

如果我尝试通过任务管理器关闭这样的进程,它会要求我关闭整个计算机或取消。(我没有找到任何与此相关的内容)

c++ windows winapi process

2
推荐指数
1
解决办法
674
查看次数

在x86_64模式下,寄存器中无法容纳64位数字

我在这里的PC上有一个Intel处理器,它以64位模式x86_64运行,如果我使用字寄存器或使用某些标志优化功能,则寄存器的大小为64位,该变量往往放在寄存器中,但是,如果我将值放在32位以上,则编译器会抱怨,即我的int不是64位,为什么会发生这种情况?如果将变量放在寄存器中,那不是64位,我什至没有得到它的内存地址?也就是说,它甚至没有放置在堆栈上。

#include <stdio.h>

int main(void) {

    register int x = 4294967296;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译:

gcc example.c -o example -Wall -Wextra

输出:

警告:隐式常量转换[-Woverflow]寄存器int x = 4294967296中溢出;

c c++ assembly gcc cpu-registers

2
推荐指数
1
解决办法
175
查看次数

链表的复制构造函数导致内存错误

我正在编写自己的链表类(用于教育目的),这里是:

我的代码

#include <iostream>

using namespace std;

#define PRINT(x) #x << " = " << x << " "

struct ListNode {
  int val;
  ListNode* next = nullptr;
  ListNode(int x) : val(x), next(nullptr) {}
};

class LinkedList {
private:
  ListNode* _head;
  unsigned long long int _size;
public:

  LinkedList() :_head(nullptr), _size(0) {}

  LinkedList(ListNode* _h) :_head(_h), _size(0) {
    ListNode* node = _head;
    while (node != nullptr) {
      _size++;
      node = node->next;
    }
  }

  // Copy constructor
  LinkedList(const LinkedList& obj) {
    ListNode* node …
Run Code Online (Sandbox Code Playgroud)

c++ pointers linked-list copy-constructor

2
推荐指数
1
解决办法
83
查看次数