Случайные байты отображаются при разборе строки и сохранении ее в виде массива char - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь разобрать строку типа HTTP POST /abc/def/ghi/klm/mno, где я хочу разделить различные компоненты, а именно протокол, HTTP-глагол и путь.

Я использую функцию strtok, а затем копирование строки с использованием функции strlen. Но когда я пытаюсь напечатать строку, она дает несколько случайных байтов, как показано ниже.

enter image description here

Я не могу понять причину этого. Вот что я делаю.

struct my_con {
    char protocol[100];
    char method[100];
    char uri[100];
};

char* header = "HTTP POST /abc/def/ghi/klm/mno";

void my_func(my_con **mc) {
   char* p = strtok(header," ");
   int c = 0;
   while(p != NULL) {

       if(count == 0) strncpy((**mc).protocol, p, strlen(p));
       elseif(count == 1) strncpy((**mc).method, p, strlen(p));
       elseif(count == 2) strncpy((**mc).uri, p, strlen(p));
       count++;
       p = strtok(NULL, " ");
   }
}

1 Ответ

0 голосов
/ 18 января 2020

strspn и strcspn могут использоваться для итерации по буквальной строке.

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

int main ( void) {
    char* header = "HTTP POST /abc/def/ghi/klm/mno";
    char temp[100];
    int offset = 0;
    int span = 0;

    while ( header[offset]) {
        span = strspn ( header + offset, " ");//count spaces
        offset += span;//advance offset past spaces
        span = strcspn ( header + offset, " ");//count non-space
        if (span && span < 99) {
            strncpy ( temp, header + offset, span);
            temp[span] = 0;//terminate
            printf ( "%s\n", temp);
        }
        offset += span;//advance offset past non-space
    }

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...