私の割り当ての1つでは、HTTP要求の1行を取り出して複数のサブリング(メソッド、HTTPバージョンエラー機能は既に実装されていると考えてください。ここで が関数である:腹筋_経路とクエリ:CS50 PSET6:解析関数はポインタの内容を変更しません
bool parse(const char* line, char* abs_path, char* query)
{
//I don't wanna deal with a const :p so I copied it into a normal string.
char *token;
char _line[strlen(line)];
strcpy(_line, line);
//Dividing the line into a Method, a request target, and a HTTP_version
char *search = " ";
token = strtok(_line, search);
char method[strlen(token)];
strcpy(method, token);
token = strtok(NULL, search);
char request_target[strlen(token)];
strcpy(request_target, token);
token = strtok(NULL, search);
char HTTP[strlen(token)];
strcpy(HTTP, token);
//Some error Handling
if (strcasecmp(method, "GET")!=0)
{
error(405);
return false;
}
if(request_target[0]!='/')
{
error(501);
return false;
}
for (int i=0; i<strlen(request_target); i++)
{
if(request_target[i]=='"')
{
error(400);
return false;
}
}
if (strcasecmp(HTTP, "HTTP/1.1")!=0)
{
error(505);
return false;
}
char *search2 = "?";
char* temp1 = strtok(request_target, search2);
abs_path = malloc(strlen(temp1)+1);
strcpy(abs_path, temp1);
char* temp2 = strtok(NULL, search2);
query = malloc(strlen(temp2)+1);
strcpy(query, temp2);
return true;
}
ので、この関数の問題点は、二つのポインタの内容には影響しないということです。それをデバッグした後、私は関数の中で2つが正しい値を得ていることに気付きましたが、それはメイン関数の別の話です。
私を助けてもらえますか? ありがとうございました。現在の関数署名付き
'char_line [strlen(line)];' - > 'char _line [strlen(line)+1];'ヌルターミネータの場合+1。同上。 – BLUEPIXY
ポインタでポインターを渡すか、変更されません。 –