变量类型问题~
最近玩crackme,些了一个注册机,出现了一些问题,请给位达人指点下啊~~!
#include <stdio.h>
#include <string.h>
void main()
{
int tmp,length;
unsigned i;
char name[128]={0};
char regcode[128]={0};
printf("Input Your Name Plz:");
scanf("%s",&name);
length=strlen(name);
tmp=length+0x7d3;
sprintf(regcode,"tsrh-%d-",tmp);
length=strlen(regcode);
for(i=0;i<strlen(name);i++)
{
tmp=name[i]+0x0c;
tmp=tmp-0x11+tmp-length;
tmp=tmp^(name[i]+0x0c);
sprintf(regcode[i],"%X",tmp); //这里将计算结果的16进制输出到regcode里面,但是报错。
}
for(i=0;i<0x10;i++)
{
tmp=name[i]+1;
tmp=tmp^regcode[i+11];
while(tmp<0x41) tmp+=0x08;
while(tmp>0x5a) tmp-=0x03;
sprintf(regcode[i+9],"%X",tmp); //说是参数类型不匹配,郁闷ing,真么解决?
}
printf("Your Regcode is:%s",regcode);
}
VC下报错提示:
Compiling...
a.c
D:\vc\a.c(28) : warning C4047: 'function' : 'char *' differs in levels of indirection from 'char '
//还有这一句报错是什么意思?
D:\vc\a.c(28) : warning C4024: 'sprintf' : different types for formal and actual parameter 1
D:\vc\a.c(40) : warning C4047: 'function' : 'char *' differs in levels of indirection from 'char '
D:\vc\a.c(40) : warning C4024: 'sprintf' : different types for formal and actual parameter 1
a.obj - 0 error(s), 0 warning(s)
[解决办法]
#include <stdio.h>
int sprintf(char *buf,const char *format,...);
函数sprintf()是C标准库里面的I/O函数。
sprintf()与printf()基本相同,但输出写到字符数组buf中而不是stdout中。由buf指向的数组以null 结尾。
例子:
char str[80];
sprintf(str,"%s%d%c","one",2,'3');
我 google 的,o(∩_∩)o...哈哈
[解决办法]
int sprintf( char *buffer, const char *format [, argument] ... );
char * buffer !!!
sprintf(®code[i],"%X",tmp); // sprintf(regcode[i],"%X",tmp);
[解决办法]
regcode[i]
regcode[i+9]
都是char 这里的sprintf函数需要的是char * 而不是char。所以才会报错的。
你改成regcode就可以了
[解决办法]
sprintf()的第一个参数是一个地址。
sprintf(regcode[i],"%X",tmp); //这里将计算结果的16进制输出到regcode里面,但是报错。
改为: sprintf(regcode+i,"%X",tmp);
sprintf(regcode[i+9],"%X",tmp); //说是参数类型不匹配,郁闷ing,真么解决?
改为: sprintf(regcode+i+9,"%X",tmp);