我使用系统调用编写了简单的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]='\0';
while(1)
{
write(1,p1,sizeof(p1));
b=read(0,pass1,IDLEN);
pass1[b-1]='\0';
write(1,p2,sizeof(p2));
c=read(0,pass2,IDLEN);
pass2[c-1]='\0';
int temp=0;
while(pass1[temp] == pass2[temp])
{
if(pass1[temp] == '\0' || pass2[temp] == '\0')
{
break;
}
temp++;
}
if(pass1[temp] == '\0' && pass2[temp] == '\0')
{
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);
}
答案 0 :(得分:2)
包括<string.h>
; memset()
通常是宏,而不是标准库中的符号。
编辑:虽然没有明确调用,但编译器可能会为char user_name[IDLEN]="";
和其他字符串变量调用它。
您应该使用&#39; -W -Wall&#39;进行编译。检测这些问题。
答案 1 :(得分:0)
我从
修改了我的代码char user_name[IDLEN]="";
char pass1[IDLEN]="";
char pass2[IDLEN]="";
到
char user_name[IDLEN];
char pass1[IDLEN];
char pass2[IDLEN];
它就像一个魅力! :)