2016-10-25 2 views
0

Нам было предложено создать страницу входа в систему с использованием HTML, C/CGI и CSS. Я хотел бы начать с основ, HTML и C/CGI первой, так что я создал это:C/HTML - печать имени пользователя и пароля из формы HTML

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(void) 
{ 
char *data; 
char *user; 
char *password; 
printf("Content-type:text/html\r\n\r\n"); 
printf("<!DOCTYPE html><html><head><title>Welcome!</title></head><body>"); 
data = getenv("QUERY_STRING"); 
    if (data) { 
     sscanf(data,"user=%s&password=%s", &user, &password); 
     printf("Hello Mr./Ms. %s\n",user); 
     printf("You entered your password %s\n",password); 
     } 
printf("<form action='http://localhost/inch.html'>"); 
printf("<input type=submit value='Compute'>"); 
printf("</body></html>"); 
exit(EXIT_SUCCESS); 
} 

Однако компилятор показывает мне эту проблему:

предупреждение: формат «% S» ОЖИДАЕТ аргумент типа «char *», но аргумент 3 имеет тип «char **» [-Wformat =] sscanf (данные, «пользователь =% s & пароль =% s», & пользователь, & пароль);

Кроме того, HTML показывает мне ошибку 500.

Любые идеи о том, как это исправить? Я довольно новичок в этом деле HTML/CGI, и я был бы признателен за помощь на этом пути. Благодаря!

+0

определяются некоторые переменные, указатели, но вы никогда не сделать их указать в любом месте. Это неверно и приведет к * неопределенному поведению *. –

+0

Что касается вашего предупреждения, вы на самом деле * читаете * его? Это точно говорит о том, что не так. –

ответ

0

Проблема заключается в том, sscanf нужен указатель на символ:

int sscanf (const char * s, const char * format, ...); 

Попробуйте это:

char user[100]; 
char password[100]; 
// ... 
sscanf(data,"user=%s&password=%s", user, password); 
Смежные вопросы