栈帧图:
bug函数:
#include<stdio.h> void *main_ret=0; int Bug() { int a=0; int *p=&a; p+=2; *p=main_ret; printf("hehe!! i am here!!\n"); system("pause"); } int Average(int x,int y) { int z=(x&y)+((x^y)>>1); int *p=&z; p+=2; main_ret=*p; *p=Bug; return z; } int main() { int a=10; int b=20; int c=Average(a,b); printf("%d\n",c); _asm{ sub esp,4 } printf("i am back!!\n"); return 0; }
实现一个函数,可以左旋字符串中的k个字符:
#include<stdio.h>
#include<string.h> int main() { char arr[50] = { 0 }; int l = 0; int ret = 0; scanf("%s", arr); scanf("%d", &ret); l = strlen(arr); if (ret <= (l/2)) { int i = 0; for (i = 0; i < ret; i++) { char tmp = 0; tmp = arr[i]; arr[i] = arr[l - 1-i]; arr[l - 1-i] = tmp; } printf("%s\n", arr); } else { printf("交换数值太大\n"); } return 0; }
判断一个字符串是否为另外一个字符串旋转之后的字符串:
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[50] = { 0 };
char arr2[50] = { 0 };
int l = 0;
scanf("%s", arr1);
scanf("%s", arr2);
l = strlen(arr1);
if (l == strlen(arr2))
{
int i = 0;
for (i = 0; i < l; i++)
{
int j = 0;
char tmp = 0;
if (strcmp(arr1, arr2) == 0)
{
printf("1\n");
return 0;
}
tmp = arr2[0];
for (j = 0; j < l - 1; j++)
{
arr2[j] = arr2[j + 1];
}
arr2[l - 1] = tmp;
}
printf("0\n");
return 0;
}
printf("0\n");
return 0;
}