Сінтаксічная радок даўжынёй у C

Я напісаў сервер у Python, і кліент у C.

Сервер пітона адправіць г.зн. "1 1000 \ п» да кліента C.

Функцыя C, што recieves гэтага радка варта разабраць яго на два доўгія ИНТ-х гадоў.

void receive_job() {
 char tmp_buffer[256];
 long start, stop;
 recv(sock, tmp_buffer, 255, 0);
 /*
 here I wonder how I can parse tmp_buffer to set start and stop values.
 */
}

Я не вельмі дасведчаны ў C, так што я быў бы ўдзячны за каментары з гэтай нагоды.

0

4 адказы

Паглядзіце на strtol() або strtoul (), у залежнасці ад вашага канкрэтнага тыпу дадзеных:

char end;
long x = strtol(tmp_buffer,&end,10);
long y = strtol(end+1,NULL,10);
5
дададзена

Выкарыстоўвайце strtol .

char data[] = "1 1000\n";
char *next, *err;
long a = strtol(data, &next, 10);
long b = strtol(next, &err, 10);
4
дададзена
Дзякуй, гэта працуе, але я палічыў за лепшае sscanf :)
дададзена аўтар Dog eat cat world, крыніца

Паглядзіце sscanf старонка кіраўніцтва - але праверыць вяртаецца значэнне!

2
дададзена
Дзякуй! Гэта тое, што мне трэба!
дададзена аўтар Dog eat cat world, крыніца

Лепш ачысціць tmp_buffer выкарыстоўваючы MemSet перад выклікам RECV ці, па меншай меры, дадаць нулявы байт у ім. У адваротным выпадку ён будзе ўтрымліваць смецце, які вы маглі б разабраць, калі нешта няправільна быў перададзены.

1
дададзена
дзякуй, я ў цяперашні час, выкарыстоўваючы sscanf з выразам «% Ld% Ld \ п», таму я лічу, што гэта не павінна быць неабходна ачысціць tmp_buffer.
дададзена аўтар Dog eat cat world, крыніца