новичок по программированию на C здесь ищет небольшую помощь!У меня есть буфер, содержащий некоторые данные, предоставленные клиентской программой, и скажем что-то вроде этого:
pcity: Амстердам gcity
Моя проблема в том, что внутри сервера я хотел быперебрать этот цикл и «вытолкнуть» команды и аргументы, которые я уже отправил ответ клиенту.В этом примере, скажем, после обработки части pcityAmsterdam я бы хотел, чтобы буфер стал gcity.
Это мой код:
while(sizeof(incbuf) > 0)
{
if(incbuf[0] == 103) //get request
{
puts("get req");
memmove(incbuf, incbuf+1, strlen(incbuf));
//puts(incbuf);
key = strtok(incbuf, ":");
//printf("%s\n",key);
res = get(key);
printf("%s\n",&res);
if(res != NULL) //we got a match
{
puts("match");
if(servbuf[0] == '\0')
servbuf[0] = 102;
else
servbuf[strlen(servbuf)] = 102;
strcat(servbuf, res);
send(new_socket,servbuf,1024, 0);
}
else //not found
{
puts("not a match");
if(servbuf[0] == '\0')
servbuf[0] = 110;
else
servbuf[strlen(servbuf)] = 110;
strcat(servbuf, &res);
printf("BEFORE THE NOT FOUND: %s\n", servbuf);
send(new_socket,servbuf,1024, 0);
}
memmove(incbuf, incbuf+strlen(key), strlen(incbuf));
printf("%s\n", incbuf);
}
else if(incbuf[0] == 112) //put request
{
puts("put req");
memmove(incbuf, incbuf+1, strlen(incbuf));
char* keytoken = strtok(incbuf, ":"); //get rid of the type
printf("token: %s\n",keytoken );
char* key = malloc((strlen(keytoken)));
char* value = malloc((strlen(incbuf))); //Amsterdam--> key :city
strcpy(key, keytoken);
printf("key: %s\n",key );
char* valuetoken = strtok(NULL, ": ");
strcpy(value, valuetoken);
printf("value: %s\n",value );
put(key, value);
memmove(incbuf, incbuf+strlen(key)+strlen(value)+1, strlen(incbuf));
printf("AFTER MEMMOVE THIS IS THE BUF: %s\n", incbuf);
}
На данный момент я знаю, что strtok работает с моим массивом incbuf, но он мне нужен для токенизации массива.Вероятно, проблема дизайна здесь?
Есть предложения?