程序代码:
int main()
{
int i;
for (i = 0; i < 0, 5; i++)
printf("%d ", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的循环被无限次执行。
什么i<0,5意思,如何评价?
我有两个清单
l1 = ['aaaaaaaaaaaaaaaaa','bb']
l2 = ['FY', 'EY']
Run Code Online (Sandbox Code Playgroud)
我想遍历两个列表(长度始终相同)并打印由多个选项卡分隔的每个可迭代对象。
例如:
for x,y in zip(l1,l2):
print(x,'\t'*3,y)
aaaaaaaaaaaaaaaaa FY
bb EY
Run Code Online (Sandbox Code Playgroud)
但是,我希望打印由列表中最长的元素标记,以便打印具有标准化格式:
print(formatted_print_tabs)
aaaaaaaaaaaaaaaaa FY
bb EY
Run Code Online (Sandbox Code Playgroud)
我花了一些时间试图弄清楚这一点,但我却摸不着头脑。
我没有在网上找到任何关于在 C 中创建对象时会发生什么的信息:比如它们的值被初始化或它们采用垃圾值。
#include <stdio.h>
struct temp
{
int a;
} s;
int main()
{
printf("%d", s.a);
}
Run Code Online (Sandbox Code Playgroud)
输出是:0。
那么 0 是垃圾值吗??或者这是一个未定义的行为?
当我声明:
struct str_node{
int data;
struct str_node *next;
}node;
node *head = NULL;
Run Code Online (Sandbox Code Playgroud)
是不是像这样:
head = NULL;
Run Code Online (Sandbox Code Playgroud)
或者
*head = NULL
Run Code Online (Sandbox Code Playgroud) 所以我试图对此代码执行基于堆栈的缓冲区溢出:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
void win()
{
printf("well done!");
}
void vulnfunc(){
char buffer[36];
gets(buffer);
printf("Buffer contents are %s\n",buffer);
}
int main(int argc,char**argv){
vulnfunc();
}
Run Code Online (Sandbox Code Playgroud)
所以我用 44 个字节覆盖了 EIP(缓冲区的 36 个字节和额外的 8 个字节)。然后我得到了函数 win 的地址,将其更改0x53e58955为适当的地址,如下所示
\x55\x89\xe5\x53
Run Code Online (Sandbox Code Playgroud)
当我将两个字符串连接在一起作为输入时,它仍然不会调用该win()函数。我尝试添加"BBBB"填充来填充 ebp,但也没有运气。如果有人可以提供一些建议,我将非常感激。
它在 Ubuntu、x86_64 上运行
结构体生日{ int day:6; }生日;
在声明b-day为结构时,它显示以下错误:
error: expected ':', ',', ';', '}' or '__attribute__' before '-' token|
Run Code Online (Sandbox Code Playgroud)
但是从变量名中删除连字符后它就可以工作了,为什么呢?
我热衷于其他人的代码并想了解这里发生了什么。这个结构中存储了什么?
这是C中的某种模式吗?
typedef struct _P_NEXT P_NEXT;
struct _P_NEXT {P_NEXT *p_el;};
Run Code Online (Sandbox Code Playgroud) 我得到了意想不到的输出,我无法弄清楚原因。
#include <stdio.h>
int main() {
int a = 0100;
int b = 010;
int c = 1111;
int d = 01111;
printf("0100 => %d, 010 => %d, 1111 => %d, 01111=> %d\n", a, b, c, d);
}
Run Code Online (Sandbox Code Playgroud)
输出:
0100 => 64, 010 => 8, 1111 => 1111, 01111=> 585
Run Code Online (Sandbox Code Playgroud)
为什么会出现这样的输出?