小编eck*_*kes的帖子

如何确保两种类型具有相同的尺寸?

在我的代码中,我想确保这一点sizeof(a) == sizeof(b).

第一种方法是让预处理器进行检查:

#if (sizeof(a) != sizeof(b))
#  error sizes don't match
#endif
Run Code Online (Sandbox Code Playgroud)

因为而不能编译fatal error C1017: invalid integer constant expression.好的.了解.

接下来尝试:

if(sizeof(a) != sizeof(b)){
  printf("sizes don't match\n");
  return -1;
}
Run Code Online (Sandbox Code Playgroud)

这会导致警告:warning C4127: conditional expression is constant.

现在,我被困住了.是否有一种警告且无错误的方法来确保两个结构ab具有相同的大小?


编辑: 编译器是Visual Studio 2005,警告级别设置为4.

c visual-studio-2005

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

使用libelf提示生成ELF

我正在尝试使用libelf生成一个简单的静态ELF,但我似乎遇到了麻烦.

我不希望生成一个目标文件然后用LD链接它,而是希望我自己生成它.

该程序的主要目的是生成具有一个LOAD段的静态ELF并执行代码.

主要问题不在于shellcode本身,而是在我试图以错误的方式生成的一些标题中.当我尝试运行生成的ELF时,它会被杀死,好像内核无法找到它刚刚加载的段等.

如果你们能暗示我,我会很喜欢.

create_elf.3.c

#include <err.h>
#include <fcntl.h>
#include <libelf.h>
#include <stdio.h>
#include <stdlib.h>
#include <sysexits.h>
#include <unistd.h>

unsigned char code[] =
"\x0b\x58\x99\x52\x66\x68\x2d\x70"
"\x89\xe1\x52\x6a\x68\x68\x2f\x62\x61"
"\x73\x68\x2f\x62\x69\x6e\x89\xe3\x52"
"\x51\x53\x89\xe1\xcd\x80";

int main(int argc, char *argv[])
{
  int           fd;
  Elf           *e;
  Elf_Scn       *scn;
  Elf_Data      *data;
  Elf32_Ehdr    *ehdr;
  Elf32_Phdr    *phdr;
  Elf32_Shdr    *shdr;
  if (argc != 2)
    errx(EX_USAGE,"input... ./%s filename\n",argv[0]);
  if (elf_version(EV_CURRENT) == EV_NONE)
    errx(EX_SOFTWARE,"elf_version is ev_none, wtf? %s\n",elf_errmsg(-1));
  if ((fd = open(argv[1], O_WRONLY | O_CREAT, 0777)) < 0)
    errx(EX_OSERR, "open %s\n",elf_errmsg(-1));
  if ((e = …
Run Code Online (Sandbox Code Playgroud)

c linux elf abi

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

如何在众多文件中解决相同的合并冲突?

假设我在200个文件中有这个冲突:

<<<<<<< HEAD
/*  Version         1.0.0       */
/*  Date            2017-05-30  */
=======
/*  Version         1.0.1       */
/*  Date            2018-11-30  */
>>>>>>> release/1.0.1
Run Code Online (Sandbox Code Playgroud)

我确定我想要1.0.1所有文件中的版本.但仅仅使用--theirs所有文件是不可行的,因为我还有其他修改,应该保留--ours.

有没有办法解决这个冲突,--theirs然后手动解决其他冲突(只在一些文件中)?

git merge-conflict-resolution

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

我如何使用git diff -G?

我正在编写一个小测试套件来运行要在一堆输入文件上进行测试的工具.对于每个输入文件,该工具正在创建相应的输出文件(两者都是XML格式).输入和输出文件在Git仓库中签入.

输出文件带有编译工具的时间,因此输出文件在被测试工具重新创建后肯定会被修改.

如果输出已经改变(当我修改工具的源代码时)快速一瞥,我想检查节点的内容是否OutputFingerprint已经改变(对输出文件的相关部分的内容进行简单的哈希) .

阅读手册git-diff,我发现有一个-G选项:

-G <regex>
查找添加或删除的行与给定<regex>匹配的差异.

不幸的是,它们没有提供如何使用该-G选项的示例.

我的第一个想法是简单地写

git diff -GOutputFingerprint
Run Code Online (Sandbox Code Playgroud)

但那是错的:

> git diff -GOutputFingerprint
error: invalid option: -GOutputFingerprint
Run Code Online (Sandbox Code Playgroud)

接下来的想法是将正则表达式放入斜杠,这也是不成功的:

> git diff -G/OutputFingerprint/
error: invalid option: -GC:/Program Files/Git/OutputFingerprint/
Run Code Online (Sandbox Code Playgroud)

此外,只是在两者之间放置一个空格-G并且OutputFingerprint不起作用:

> git diff -G OutputFingerprint
fatal: ambiguous argument 'OutputFingerprint': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
Run Code Online (Sandbox Code Playgroud)

当我打电话git diff没有任何参数时,我得到修改:

-    <OutputFingerprint>e45807ca76fc5bb78e9e928c6fb7eed6</OutputFingerprint>
+    <OutputFingerprint>d0846851bc9d52b37f7919def78660a2</OutputFingerprint>
Run Code Online (Sandbox Code Playgroud)

另一种想法是使用git …

git git-diff msysgit

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

如何在QWERTZ键盘上键入CTRL +](为了使用Vim跳转到标签)?

在Vim中,跳转到光标下关键字定义的常用方法是键入CTRL- ](如声明的那样:he CTRL-\]).

但是,当你有一个QWERTZ键盘(见下文,StrgCtrl),你在一些麻烦:没有单独的]键盘上键; 你必须按ALT GR- 9键入].因此,要跳转到标签,它是必要的CTRL- ALT GR- 9这不起作用(并且也是不可行的,因为如果你碰巧经常使用它会打破你的手指).

QUERTZ键盘

那么,我怎样才能使用QWERTZ键盘跳转到标签?

另外,我也很乐意,如果有人可以解释为什么迫切CTRL- ALT GR- 9没有工作.


编辑:
我对显然的答案"重新映射到别的东西"或"按下鼠标按钮"不感兴趣.


在Vi/Vim上重复:https://vi.stackexchange.com/questions/5732/tag-navigation-using-ctrl-does-not-work-with-non-english-keyboard-on-windows

vim

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

在Visual Studio(或其他JS调试器)中调试Javascript

我有一个.js文件通常被执行cscript.exe(即不在浏览器中运行,不能在那里运行).

我知道,我可以养活cscript.exe//X参数,以获得要求调试器来选择.好.没关系.

我选择"Visual Studio 2005 Debugger",IDE出现,执行在第一行停止.精细.

脚本终止(或我终止它),我编辑一些东西并想再次调试它.

简单的想法就是F5再次点击并运行调试器.但这不起作用.VS只告诉我它找不到任何调试符号cscript.exe: 截图

现在怎么办?启动cscript.exe命令行再次为每个调试运行在我看来是相当繁琐的.

有没有办法简单地用VS调试脚本?另外还有其他调试工具的提示.


编辑:
答案t0nyh0是八九不离十.我创建了一个虚拟控制台应用程序,编译并调试器出现.但是,有两件事并不完美

  1. cscript.exe总是要求调试器使用(VS的哪个实例).
    可以通过直接在命令行中指定某个调试器实例来解决这个问题吗?

  2. 为了触发构建后事件,必须对源进行一些修改.目前,我只需添加/删除一个空白行来触发构建我的虚拟项目.
    有没有办法总是执行后期构建脚本,即使没有任何改变?

javascript debugging wsh visual-studio

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

我可以使用git-svn进行交互式代理身份验证吗?

我是一个身份验证代理,需要通过https访问远程SVN仓库git svn.

代理在我的~/.subversion/servers文件中定义.

当我开始时git svn fetch,我收到一条错误消息:

RA图层请求失败:' http:// url/to/repos/branches/experimental '的选项

好.没问题.让我们写下凭据~/.subversion/servers→一切正常.

但是,我是一个有点有点不舒服具有存储在一个纯文本文件在我的硬盘我的域凭据.

在使用https 时,还有其他方式(特别是交互式方法)在我的代理上进行身份验证git svn吗?

信息:应在其中完成此操作的PC位于Windows域中,并使用NTLM进行身份验证.

svn git proxy ntlm git-svn

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

vim中的Unicode打印

我正在处理包含大量unicode字符(≼,⊓,⊔,...)的文本文件.Vim显示它们很好,但是当我打印时它们被一般字符替换.Gedit打印它们没有问题,但是为了打印而启动另一个编辑器有点痛苦.

有没有办法让vim(在Linux/Gnome上)正确打印?我尝试使用vim-gnome,希望它使用与gedit相同的基础设施,但事实并非如此.

printing unicode vim gnome

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

哈希集大小问题

这里在下面的例子中我创建了hashset,其中我添加了三个字符串值s1,s2,s3虽然它显示了我的hashset 1的大小.为什么?

public static void main(String args[])
{
    String s1="abc";
    String s2=new String("abc");
    String s3="abc";
    Set setdemo=new HashSet();
    setdemo.add(s1);
    setdemo.add(s2);
    setdemo.add(s3);

    System.out.println("s1 hashcode -:"+ System.identityHashCode(s1));
    System.out.println("s2 hashcode -:"+ System.identityHashCode(s2));
    System.out.println("s3 hashcode -:"+ System.identityHashCode(s3));
    System.out.println("Set size is -:"+setdemo.size());
}
Run Code Online (Sandbox Code Playgroud)

输出:

s1 hashcode -:17523401
s2 hashcode -:8567361
s3 hashcode -:17523401
Set size is -:1
Run Code Online (Sandbox Code Playgroud)

java hashset

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

如何在GraphViz中设置基于记录的节点的端口样式?

我喂这个简单的输入脚本定义基于记录节点,以便从它(SVG部分实际上并不重要)创建一个SVG来点:

graph mygraph{
  node [shape=record, fontsize=10, fontname=Arial];
  rankdir=TB;
  ranksep=0.5;
  rank=max;
  splines=true;
  overlap=false;
  mindist=0.2;
  "d1" [style=solid, label="{\N|{<0> 0|<1> 1}}"];
  "d2" [style=solid, label="{\N|{<0> 0|<1> 1|<2> 2|<3> 3}}"];
  "d1":0 -- "d2":0[color=blue, penwidth=3, tooltip="d1:0 -- d2:0", URL="#"];
}
Run Code Online (Sandbox Code Playgroud)

这将生成一个图表,其中端口0 d1和端口0 d2由蓝色样条线连接:

点结果

精细.

现在我需要着色端口.例如:端口1 d2应为绿色,端口2 d2应为橙色.或者其他的东西.

我该如何实现这一目标?


编辑1:节点周围的实心框架很重要.我需要它为某些节点固定,为其他节点破灭.

dot styling graphviz

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