对 memset 的未定义引用
Undefined reference to memset
我使用系统调用编写了简单的 c 程序,当我使用 gcc 编译它时它运行良好。但是当我尝试使用命令
生成shell代码(shellforge)时
./sf.py username.c
我收到错误说明
Undefined reference to memset
如何解决?这是我的代码
#define O_CREAT 0100
#define O_WRONLY 01
#define O_APPEND 02000
#define IDLEN 100
int main(void)
{
char user_name[IDLEN]="";
char pass1[IDLEN]="";
char pass2[IDLEN]="";
int fd,a,b,c;
//to give user direction
char user[]="Please type your username and hit enter:\n";
char p1[]="Please type password and hit enter:\n";
char p2[]="Please type password and hit enter:\n";
write(1,user,sizeof(user));
a=read(0,user_name,IDLEN);
user_name[a-1]='[=12=]';
while(1)
{
write(1,p1,sizeof(p1));
b=read(0,pass1,IDLEN);
pass1[b-1]='[=12=]';
write(1,p2,sizeof(p2));
c=read(0,pass2,IDLEN);
pass2[c-1]='[=12=]';
int temp=0;
while(pass1[temp] == pass2[temp])
{
if(pass1[temp] == '[=12=]' || pass2[temp] == '[=12=]')
{
break;
}
temp++;
}
if(pass1[temp] == '[=12=]' && pass2[temp] == '[=12=]')
{
break;
}else{
char error[] = "password does not match! please type your password again";
write(1,error,sizeof(error));
}
}
fd = open("user.txt",O_CREAT|O_WRONLY|O_APPEND,0666);
if(fd<0)
{
return 1;
}
char file_user[]="\nUsername:";
char file_pass[]="\nPassword:";
write(fd,file_user,sizeof(file_user)-1);
write(fd,user_name,a-1);
write(fd,file_pass,sizeof(file_pass)-1);
write(fd,pass1,b-1);
}
包括<string.h>
; memset()
通常是宏而不是标准库中的符号。
编辑:虽然没有显式调用,但编译器可能会为 char user_name[IDLEN]="";
和其他字符串变量调用它。
您应该使用“-W -Wall”进行编译以检测此类问题。
我修改了我的代码
char user_name[IDLEN]="";
char pass1[IDLEN]="";
char pass2[IDLEN]="";
至
char user_name[IDLEN];
char pass1[IDLEN];
char pass2[IDLEN];
而且效果非常好! :)
我使用系统调用编写了简单的 c 程序,当我使用 gcc 编译它时它运行良好。但是当我尝试使用命令
生成shell代码(shellforge)时./sf.py username.c
我收到错误说明
Undefined reference to memset
如何解决?这是我的代码
#define O_CREAT 0100
#define O_WRONLY 01
#define O_APPEND 02000
#define IDLEN 100
int main(void)
{
char user_name[IDLEN]="";
char pass1[IDLEN]="";
char pass2[IDLEN]="";
int fd,a,b,c;
//to give user direction
char user[]="Please type your username and hit enter:\n";
char p1[]="Please type password and hit enter:\n";
char p2[]="Please type password and hit enter:\n";
write(1,user,sizeof(user));
a=read(0,user_name,IDLEN);
user_name[a-1]='[=12=]';
while(1)
{
write(1,p1,sizeof(p1));
b=read(0,pass1,IDLEN);
pass1[b-1]='[=12=]';
write(1,p2,sizeof(p2));
c=read(0,pass2,IDLEN);
pass2[c-1]='[=12=]';
int temp=0;
while(pass1[temp] == pass2[temp])
{
if(pass1[temp] == '[=12=]' || pass2[temp] == '[=12=]')
{
break;
}
temp++;
}
if(pass1[temp] == '[=12=]' && pass2[temp] == '[=12=]')
{
break;
}else{
char error[] = "password does not match! please type your password again";
write(1,error,sizeof(error));
}
}
fd = open("user.txt",O_CREAT|O_WRONLY|O_APPEND,0666);
if(fd<0)
{
return 1;
}
char file_user[]="\nUsername:";
char file_pass[]="\nPassword:";
write(fd,file_user,sizeof(file_user)-1);
write(fd,user_name,a-1);
write(fd,file_pass,sizeof(file_pass)-1);
write(fd,pass1,b-1);
}
包括<string.h>
; memset()
通常是宏而不是标准库中的符号。
编辑:虽然没有显式调用,但编译器可能会为 char user_name[IDLEN]="";
和其他字符串变量调用它。
您应该使用“-W -Wall”进行编译以检测此类问题。
我修改了我的代码
char user_name[IDLEN]="";
char pass1[IDLEN]="";
char pass2[IDLEN]="";
至
char user_name[IDLEN];
char pass1[IDLEN];
char pass2[IDLEN];
而且效果非常好! :)