对 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];

而且效果非常好! :)