2015-04-13 3 views
-1

У меня есть char array в CКак получить значение строки из массива символов в C

#define BUFSIZE 2048 
unsigned char buf[BUFSIZE]; 

char request[10]; 
strcat(request "GET key01"); 
request[10] = '\0'; 

buf = request; 

Запроса поступающий из сети с помощью client-server socket моделирования, но я не включал, что здесь, чтобы держать это просто.

В любом случае, я должен токенизировать строку buf, но также хранить незакрытую копию. Я попытался это:

char* buf_for_token = buf; 
printf("What is the buf before tokenization? %s\n", buf); 

const char s[2] = " "; 
char *token; 
token = strtok(buf_for_token, s); 
token = strtok(NULL, s); 

printf("What is the buf after tokenization? %s\n", buf); 

Мой вывод:

What is the buf before tokenization? GET key01 
What is the buf after tokenization? GET 

Я бы вместо того, чтобы, как:

What is the buf before tokenization? GET key01 
What is the buf after tokenization? GET key01 

Как я могу получить значение строки из массива полукокса и сэкономить копировать, что я могу манипулировать, не влияя на исходное значение?

+0

Что такое 'strcat (запрос« GET key01 »),' должен делать? Это даже не действительный синтаксис. Вы имели в виду 'strcpy (request," GET key01 ");'? – Barmar

+0

Простым ответом является создание копии буфера с помощью 'strcpy' и tokenize копии. – Barmar

+0

token = strtok (buf_for_token, s); printf («Что такое buf после токенизации?% S \ n», buf); token = strtok (NULL, s); – Suing

ответ

1

Вы можете использовать функцию C <string.h>:

strcpy(const char *dest, const char *src); 

который будет копировать с СРК до '\ 0' гольца, в Dest, и включают в себя '\ 0' символ.

ИЛИ

использование:

strcat(const char *dest, const char *src); 

Что будет добавляться к концу уже существующей строки, начиная с нулевой прекратить «\ 0» НАЗНАЧЕНИЯ, добавляя все символы до и включая ' \ 0' .

ИЛИ

использование:

strncpy(const char *dest, const char *src, int size); 

Какие Виль скопировать п символов из полукокса * ЦСИ в символ * Dest.

1

strtok является разрушительным; он будет изменять содержимое вашего буфера, поскольку вы его подделываете, перезаписывая разделители нулевым байтом. Если вам нужно сохранить исходное содержимое буфера, вам нужно либо скопировать в другой буфер, либо сделать токенизацию второго буфера, либо вам нужно будет использовать что-то помимо strtok (что часто является правильным ответом).

Посмотрите на функции, подобные strchr или strpbrk. Вам нужно выяснить, как извлечь и сохранить отдельные токены в другой буфер, но это не так сложно.

Смежные вопросы