Разбиение строки на два и присвоение двух массивов символов - PullRequest
0 голосов
/ 30 января 2020

У меня есть строка типа:

my age is 22\r\n\r\n and I live in Rostock

и некоторые другие строки, например:

I like to swim\r\n\r\n .Yesterday I competed with my 2 friends

Теперь я хочу разделить строку на \r\n\r\n и связать ее с buffer. Вот что я пытаюсь сделать:

char buffer[500];
strcpy(buffer, "my age is 22\r\n\r\n and I live in Rostock");
char *p = buffer;
if((p = strchr(p,"\r\n\r\n"))) {
       p[strcspn(p,"tock")] = 0; // trying to slice until the end
}

printf("%s", p);

Это дает мне предупреждение, когда я пытаюсь скомпилировать высказывание warning: passing argument 2 of ‘strchr’ makes integer from pointer without a cast Я не мог понять, что это значит.

Кроме того, каков хороший способ разбить это на 2 char буфера?

1 Ответ

4 голосов
/ 30 января 2020

strchr ожидает просто char, а не строку для своего второго параметра. Таким образом, вы можете передать только один символ.

В C a char - это один символ, а строки - это символьные массивы с нулевым символом в конце.

Вероятно, вам нужно сделать следующее:

char buffer[500] = "my age is 22\r\n\r\n and I live in Rostock";  // directly initialize the char array

const char sep[] = "\r\n\r\n";

char * p = strstr(buffer, sep);   // search the separator
if (p) {
    *p = '\0';                    // null terminate the first part
    p += strlen(sep);             // make p point to the start of the second part
    printf("%s - %s\n", buffer, p);
}

Если вам действительно нужно удалить исходную часть из буфера и запустить ее со второй части, вы можете сделать:

for (char *dest = buffer; p<buffer+sizeof(buffer)-1;) {   // do not go past end of array
    *dest++ = *p++;
    if (*p == '\0') break;         // stop on first null
}
...