未定义的memset参考

时间:2016-07-27 21:05:20

标签: c unix system-calls memset shellforge

我使用系统调用编写了简单的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);
}

2 个答案:

答案 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];

它就像一个魅力! :)