小编Jab*_*cky的帖子

警告:未知的转义序列 '\

我正在尝试通过代码中的系统命令运行正则表达式,我已经浏览了 StackOverflow 中类似警告的线程,但我无法理解如何修复以下警告,它似乎仅适用于封闭括号在做\\}。警告似乎消失了,但无法在重定向文件中获得确切的输出。

#include<stdio.h>


int main(){

        FILE *in;
        char buff[512];

if(system("grep -o '[0-9]\{1,3\}\\.[0-9]\{1,3\}\\.[0-9]\{1,3\}\\.[0-9]\{1,3\}' /home/santosh/Test/text >t2.txt") < 0){
                printf("system failed:");
                exit(1);
        }
}
Run Code Online (Sandbox Code Playgroud)

警告:

dup.c:9:11: warning: unknown escape sequence '\}'
dup.c:9:11: warning: unknown escape sequence '\}'
dup.c:9:11: warning: unknown escape sequence '\}'
dup.c:9:11: warning: unknown escape sequence '\}'
dup.c: In function 'main':
Run Code Online (Sandbox Code Playgroud)

c regex

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

如何评估预处理器宏中的参数以传递给sizeof?

我想有一个函数打印出有关结构的成员变量的信息.为了使函数尽可能简单(并且没有错误),我也不想手动传入类型.这使我需要能够评估传递给我的宏的参数:

#ifndef preprocessor_stringify
#define preprocessor_stringify(s) #s
#endif

typedef struct test_s {
    void (*ptr)(void*);
} test;

void doSomething_(char *name, int offset, int size){
    printf("%s %d %d\n", name, offset, size);
}

#define doSomething(name, container) (\
    doSomething_(\
        preprocessor_stringify(name),\
        offsetof(container, name),\
        sizeof(container->name))\
    );

int main(){
    doSomething(ptr, test);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会产生编译错误 test.cpp:21:19: error: expected primary-expression before ‘->’ token sizeof(container->name))\

有想法该怎么解决这个吗?我希望解决方案兼容c和c ++,理想情况下.

c c++ c-preprocessor

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

如何“取消提升”流程

我有一个提升的进程,在用户在 UAC 对话框中回答“是”后启动。

该过程开始顺利,一切都按预期进行。

现在我需要在某个时刻“取消提升”该进程,换句话说,该进程不应完全提升,就像用户正常启动它一样。

示例场景

  • 用户A已登录
  • 用户 A 启动进程 P1,该进程将通过 UAC 提升
  • 提升的进程 P1 启动进程 P2,并且 P2 不应提升,而应在用户 A 下再次运行。

有没有办法做到这一点?

c++ winapi

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

macOS Catalina 屏幕录制权限

我正在使用 XCode 中的 C++ 开发屏幕录制应用程序。问题是,当我编译并启动应用程序时,我总是必须在“设置 > 隐私”中授予屏幕录制权限。

有没有办法总是在 XCode 或类似的东西中授予权限?在开发/测试应用程序时,总是在重新编译时手动授予权限,这真的很烦人。

c++ macos xcode objective-c macos-catalina

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

在 C 中,当幂设置为 1/2 时,为什么幂函数返回 1?

当我使用以下代码时,我试图复制sqrt(x)某物等于的想法X^(1/2)

pow(x, (1/2);
Run Code Online (Sandbox Code Playgroud)

无论我输入什么值,它都返回 1。我已经用 sqrt 函数解决了这个问题,但想知道为什么将来会发生这种情况。

c syntax integer-division

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

以下对于 C 编程中的枚举意味着什么?

在我正在读的一本书中,枚举常量是在数组之前介绍的。仅通过几个示例演示了数组的使用。现声明如下:

enum corvid { magpie, raven, jay, corvid_num};

char const * const bird [ corvid_num ] = 
{
  [raven] = "raven",
  [magpie] = "magpie",
  [jay] = "jay",
};

for ( unsigned i = 0; i < corvid_num ; ++i)
  printf ("Corvid %u is the %s\n", i, bird[i]);
Run Code Online (Sandbox Code Playgroud)

这声明了一个新的整数类型枚举 corvid,我们知道它的四个不同值。

要点 - 枚举常量具有显式值或位置值

正如您可能已经猜到的,位置值从 0 开始,因此在我们的示例中,raven 的值为 0,magpie 的值为 1,jay 的值为 2,corvid_num 的值为 3。最后的 3 显然是我们感兴趣的 3。

问题一:

是否[magpie] = "magpie"意味着magpieth 位置指的是 value "magpie"

问题2:

根据循环,how …

c enums types

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

从 .dll 访问 .exe 中定义的函数的正确方法

我有一个带有可执行文件和 DLL 的 VS 解决方案。

在可执行文件(MAIN)中:

__declspec(dllexport) void testExe()
{
    printf("Hello from EXE");
}

__declspec(dllimport) void DoStuff();

int main()
{
    DoStuff();
}
Run Code Online (Sandbox Code Playgroud)

在 .dll (DLL) 中

__declspec(dllimport) void testExe();

__declspec(dllexport) void testDll()
{
    printf("Hello from Dll");
}

__declspec(dllexport) void DoStuff()
{
    testExe();
    testDll();
}
Run Code Online (Sandbox Code Playgroud)

我在 MAIN.exe 中链接了 Dll.lib,但仍然收到链接错误:

error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl testExe(void)" referenced in function "void __cdecl DoStuff(void)"
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这个目标?

c++ windows winapi

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

strlen返回错误的值

我正在使用双向链表创建文本编辑器.这些是我的结构:

#define N 4
typedef struct node
{
    char data[N];
    int size;
    struct node* next;
    struct node* prev;
}node;

typedef struct text
{
    struct node* head;
    struct node* tail;
    int count;
    int size;
}text;
Run Code Online (Sandbox Code Playgroud)

这是我用来填充第一个节点的代码段.

void push_text (text * t, char * s)
{
    int i;
    int len = strlen(s);
    node *newnode, *nextnode, *head;

    newnode = create_node();
    t->count++;
    head = newnode;
    for (i=0; i<len; i++)
    {
        if (newnode->size < 4)
        {
            newnode->data[newnode->size] = s[i];
            newnode->size++;
        }
    .
    .
    .
Run Code Online (Sandbox Code Playgroud)

当我通过printf或通过调试器打印节点时,输出为4个字符长,正如预期的那样.请注意,我会在第一个节点填满后立即打印,因此问题在于这段代码.但是,当我使用时, …

c strlen data-structures

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

如何在编辑控件上获得左键单击通知?

我想跟踪单击左键单击编辑控件的事件.我重写PretranslateMessage函数如下:

BOOL CMyClass::PreTranslateMessage(Msg* pMsg)
    {
       switch(pMsg->message)

       case WM_LBUTTONDOWN:
       {
          CWnd* pWnd = GetFocus();
          if (pWnd->GetDlgCtrlID == MY_EDIT_CTRL_ID)
             {
                //Do some thing
             }
          break;
       }
    }
Run Code Online (Sandbox Code Playgroud)

问题是当我点击编辑控件时,所有其他控件都被禁用(例如按钮不响应点击等)

我该如何解决这个问题?或者如何在编辑框中跟踪点击通知?

c++ mfc editcontrol

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

这段代码有什么区别?

#include <stdio.h>

int main(void)
{        
  double aRate[10] = { 0.0, 0.1, 0.25, 0.5, 0.5, 0.6, 0.65, 0.8, 0.82, 0.97};
  int nAge = 0, i = 0, nFee = 1000;
  int a = 0;

  printf("%d  : \t%d \n", i, (int)(nFee*aRate[2]));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,此代码的结果为0:250,但如果我省略这样的括号,

printf("%d  : \t%d \n", i, (int)nFee*aRate[2]);
Run Code Online (Sandbox Code Playgroud)

那么结果是0:0.

为什么是

printf("%d  : \t%d \n", i, (int)(nFee*aRate[2]));
Run Code Online (Sandbox Code Playgroud)

printf("%d  : \t%d \n", i, (int)nFee*aRate[2]);
Run Code Online (Sandbox Code Playgroud)

不同?

它与优先顺序有关吗?

c

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