Проблема, с которой вы столкнулись, кажется немного неопределенной, поскольку вы на самом деле не упомянули ошибки, которые вы получаете, но из кода, который вы опубликовали, кажется, что вы столкнулись с двумя различными проблемами:
atoi()
предназначен для преобразования строкового значения в целое число ... теперь кажется, что у вас уже есть целое число в значении id
, поэтому аргумент atoi()
неверен.Вам просто нужно использовать что-то вроде sprintf()
или snprintf()
, чтобы преобразовать ваше целочисленное значение в строковое значение, а затем скопировать его в определяемый пользователем строковый буфер, если вы хотите получить строковое представление целого числа. - Вы работаете с сокетами, поэтому любая информация, передаваемая по сети, будет поступать в порядке сетевых байтов.Если вы используете платформу с прямым порядком байтов, то целое число будет иметь формат с прямым порядком байтов, и вы будете неверно интерпретировать значение вашего целого числа.Следовательно, вы должны преобразовывать целое число в стандартный порядок байтов для платформы, используя функцию типа
ntohl()
, которую можно найти внутри файла заголовка netinet/in.h
Так, например:
#include <netinet/in.h>
int id;
int sd_client;
//... code to open socket, etc.
//add your own error-checking ... stripped out here for simplicity's sake
read(sd_client, &id, sizeof(int));
id = ntohl(id);
char buffer[32];
snprintf(buffer, sizeof(buffer), "%d", id);
messaggio2(sd_client, logi, buffer);