Я хочу хранить различные типы переменных в буфере для массива символов, чтобы я мог отправлять его, и когда сервер получает его, я хочу взять этот отформатированный буфер и вернуть переменные.Как правильно использовать snprintf для форматирования информации в буфер и sscanf для получения этой информации.
Я нашел 0 примеров того, как сделать эту работу, каждый заставляет ее выглядеть такой простой задачей, что они не обеспечивают выход, поэтому я попробовал это для себя.
Я сделал туманную программу, в которой храню и извлекаю, даже не отправляя, чтобы привыкнуть к форматам и избегать всех проблем, которые я прочитал о переполнении буфера и еще много чего.
int main(int argc, char *argv[]) {
int op=1;//1 porque es un alta
int pid=getpid();
printf("pid %d\n", pid);
char * tema=argv[1];
printf("Tema %s\n", tema);
int longitud=strlen(tema)+sizeof(int)*2+1;/
printf("longitud %d\n", longitud);
char mensaje[longitud];
char *ptr=mensaje;
snprintf(ptr, longitud,"%d %d %s", op, pid,tema);
printf("mensaje %s\n", mensaje);
int opRecibido=0;
int pidRecibido=0;
char *temaRecibido;
sscanf(mensaje, "%d %d %s", &opRecibido, &pidRecibido, temaRecibido);
printf("temaRecibido %s\n", temaRecibido);
printf("pidRecibido %d\n", pidRecibido);
printf("opRecibido %d\n", opRecibido);
}
Конечно, я пробовал несколько итераций этого. Я не могу понять. temaRecibido либо пишет null, либо segfault, либо ничего не работает и т. д.
Опять же, я хочу, чтобы это как способ сериализации моих данных перед отправкой его с TCP-клиента на сервер, но я даже не могу выполнить эту работу , не отправляя его.
Часть, которая не работает, - это sscanf. Я прочитал все, что я нашел его специально прибегая к помощи
Since we have snprintf, why we don't have a snscanf?
и
How to send formatted string to socket using a small buffer?
Но есть то, что я явно не хватает
Edit: А так как я m на нем, и я вижу так много комментариев и блогов, говорящих мне не использовать sscanf, пожалуйста, каков был бы правильный способ решения этой позиции? Поскольку каждый пример я вижу работы с 1 или 2 символ * и это просто не помогает мне
не сказал, что это не так (я бы никогда не догадался, что это будет так благодарно), но при попытке использовать sscanf я все еще получаю ошибку сегментации. – keont
Теперь, когда это работает, я получаю три переменных, напечатанных, это работает с +1 и +2. И не знаю, почему. Если я ничего не добавлю, я пропускаю последнего персонажа, что имеет смысл. Просто хотел добавить, что – keont