我正在看1997年发布的nmap的源代码,我注意到这段代码看起来有点奇怪:

int i=0, j=0,start,end;
char *expr = strdup(origexpr);
ports = safe_malloc(65536 * sizeof(short));
i++;                                         /* <<<<<< */
i--;                                         /* <<<<<< */
for(;j < exlen; j++) 
  if (expr[j] != ' ') expr[i++] = expr[j]; 
expr[i] = '\0';

为什么你会有i++;,然后是i--;i0,然后i++变成i1.在那之后,i--会变成i岁到0岁.

Link to original source code.搜索:

i++;
i--;

有人能解释一下这是干什么用的吗?

推荐答案

这是一个错误.这些线加在一起导致i不变,所以它们不应该存在.

介绍nmap的链接文章发表于1997年9月1日.如果查看NSAP的SVN存储库https://svn.nmap.org/nmap,在1998年2月10日签入的初始修订版没有以下行:

int i=0, j=0,start,end;
char *expr = strdup(origexpr);
char *mem = expr;

ports = safe_malloc(65536 * sizeof(short));
for(;j < exlen; j++) 
  if (expr[j] != ' ') expr[i++] = expr[j]; 
expr[i] = '\0';

因此,这是作者在将初始nmap源代码发布到SVN的初始签入之间发现并修复的东西.

C++相关问答推荐

我编译了一个新的c程序,并收到以下错误

两个连续的语句是否按顺序排列?

C:二进制搜索和二进制插入

在 struct 中强制转换空指针

致命:ThreadSaniizer:在Linux内核6.6+上运行时意外的内存映射

获取每个循环迭代结束时的当前时间

为什么将函数名括在括号中会禁用隐式声明?

I2C外设在单次交易后出现故障

在C中包装两个数组?

从不兼容的指针类型返回&&警告,但我看不出原因

如何读取程序中嵌入的数据S自己的ELF?

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

RISC-V GCC编译器错误编译ASM代码

Tcl_GetDoubleFromObj在列表的迭代中是一个缺点

按字典顺序打印具有给定字符的所有可能字符串

If语句默认为true

C struct 中的冒泡排序

传递参数:C 和 C++ 中 array 与 *&array 和 &array[0] 的区别

返回指向函数内声明的复合文字的指针是否安全,还是应该使用 malloc?

为什么这里的符号没有解析?