【发布时间】:2016-07-27 21:05:19
【问题描述】:
我使用系统调用编写了简单的 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);
}
【问题讨论】:
-
缺少
#include <string.h> -
包含 string.h 头文件。
-
为什么? OP 在他的代码中不包含
memset。无论如何,OP 没有包含write和read。为什么 gcc 不会为此返回错误?为什么 shellforge 会为 memset 返回一个错误,而不是这个? -
添加 string.h 会导致其他错误 nw file:///home/ubuntu/Desktop/Screenshot%20(789).png
-
您使用的是哪个版本的 shellforge?根据您使用的 sflib 版本,memset() 可能会在 shellforge 包含头文件中定义的系统调用包装器下隐式调用。
标签: c unix system-calls memset shellforge