title: Accessing buffer using read() in sockets
body: <p>In my socket code I have the following structure:</p>
  
  <p>Server:</p>
  
  <pre><code>         #include &lt;stdio.h&gt;
           #include &lt;stdlib.h&gt;
           #include &lt;string.h&gt;
           #include &lt;sys/types.h&gt;
           #include &lt;sys/socket.h&gt;
           #include &lt;netinet/in.h&gt;
           #define MAXPROFILES  2
  
          int main(int argc, char *argv[])
       {
          int sockfd, newsockfd, portno, clilen;
          struct sockaddr_in serv_addr, cli_addr;
          unsigned char buf[1024];
          char* pointer = buf;
  
         struct profile_t
       {
         unsigned char length;
         unsigned char type;
         unsigned char *data;
       };
  
         typedef struct profile_datagram_t
       {
         unsigned char src[4];
         unsigned char dst[4];
         unsigned char ver;
         unsigned char n;
         struct profile_t profiles[MAXPROFILES];
       } header;
  
  
         header outObj;
  
         int j =0;
         int i =0;
  
  
         if (argc &lt; 2) {
         fprintf(stderr,"usage: %s port_number1",argv[0]);
         exit(1);
       }
         sockfd = socket(AF_INET, SOCK_STREAM, 0);
         if (sockfd &lt; 0)
         error("ERROR DETECTED !!! Problem in opening socket");
  
         bzero((char *) &amp;serv_addr, sizeof(serv_addr));
         portno = atoi(argv[1]);
  
         serv_addr.sin_family = AF_INET;
         serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
         serv_addr.sin_port = htons(portno);
  
          if (bind(sockfd, (struct sockaddr *) &amp;serv_addr, sizeof(serv_addr)) &lt; 0)
            error("ERROR DETECTED !!! There was a problem in binding");
  
          listen(sockfd, 10);
          clilen = sizeof(cli_addr);
  
  
  
          printf("Server listening on port number %d...\n", serv_addr.sin_port);
  
          newsockfd = accept(sockfd,(struct sockaddr *) &amp;cli_addr, &amp;clilen);
  
          if (newsockfd &lt; 0)
          error("ERROR DETECTED !!! the connection request was not accepted");
  
          int rc = read(newsockfd,&amp;pointer,100);
          if(rc &lt; 0){
          printf("error");
        }
          else {
          printf("success %d",rc);
        }
          for(int i=0;i&lt;29;i++){
          printf(pointer);
          printf(buf);
        }
  
  
  
  
  
   return 0;
  </code></pre>
  
  <p>}</p>
  
  <p>Client:</p>
  
  <pre><code>            int main(int argc, char *argv[])
  
           {
              int sockfd, portno, n;
              struct sockaddr_in serv_addr;
              struct hostent *server;
              unsigned char buf[1024];
              unsigned int srcAddress = 2193598184;
              unsigned int destAddress = 2193598182;
  
             struct profile_t
         {
              unsigned char length;
              unsigned char type;
              unsigned char *data;
         };
  
              typedef struct profile_datagram_t
         {
              unsigned char src[4];
              unsigned char dst[4];
              unsigned char ver;
              unsigned char n;
              struct profile_t profiles[MAXPROFILES];
          } header;
  
  
             header outObj;
  
             int j =0;
             int i =0;
        // for loop for doing the malloc so that we can allocate memory to all profiles
             for(i=0;i&lt;MAXPROFILES;i++){
             outObj.profiles[i].data = malloc(5);
          }
  
  
            for(i=0;i&lt;4;i++){
            outObj.src[i] = (srcAddress &gt;&gt; (i*8)) &amp; 0xFF;
            outObj.dst[i] = (destAddress &gt;&gt; (i*8)) &amp; 0xFF;
          }
            outObj.ver = 1;
            outObj.n = 2;
  
            memcpy(buf,&amp;outObj.src,4);
            memcpy(buf+4,&amp;outObj.dst,4);
            memcpy(buf+8,&amp;outObj.ver,1);
            memcpy(buf+9,&amp;outObj.n,2);
  
  
            outObj.profiles[0].length = 5;
            outObj.profiles[0].type = 1;
            outObj.profiles[1].length = 5;
            outObj.profiles[1].type = 2;
  
            for(i=0;i&lt;MAXPROFILES;i++){
            for(j=0;j&lt;5;j++){
            outObj.profiles[i].data[j] = j+1;
          }
        }
  
  
  
              int k = 11;
  
  
             for(i=0;i&lt;MAXPROFILES;i++){
              memcpy(buf+k,&amp;outObj.profiles[0].length,1);
              memcpy(buf+k+1,&amp;outObj.profiles[0].type,1);
              memcpy(buf+k+2,outObj.profiles[0].data,5);
              k +=7;
         }
  
  
             if (argc &lt; 3) {
             fprintf(stderr,"usage: %s hostname port\n", argv[0]);
             exit(0);
         }
             portno = atoi(argv[2]); //Convert ASCII to integer
             sockfd = socket(AF_INET, SOCK_STREAM, 0); // socket file descriptor
  
  
             if (sockfd &lt; 0)
             error("ERROR DETECTED !!! Problem in opening socket\n");
  
             server = gethostbyname(argv[1]);
             if (server == NULL) {
             fprintf(stderr,"ERROR DETECTED !!!, no such server found \n");
             exit(0);
         }
  
             bzero((char *) &amp;serv_addr, sizeof(serv_addr)); //clear the memory for server  address
  
             serv_addr.sin_family = AF_INET;
             bcopy((char *)server-&gt;h_addr,
                   (char *)&amp;serv_addr.sin_addr.s_addr,
                     server-&gt;h_length);
  
             serv_addr.sin_port = htons(portno);
  
             printf("Client 1 trying to connect with server host %s on port %d\n", argv[1], portno); 
  
  
               if (connect(sockfd,(struct sockaddr *)&amp;serv_addr,sizeof(serv_addr)) &lt; 0)
               error("ERROR in connection");
  
               printf("SUCCESS !!! Connection established \n");
  
  
               if (write(sockfd, buf, k) &lt; 0)
            {
               error("Write error has occured ");
            }
  
  
              return 0;
             }
  </code></pre>
  
  <p>Now from the client side I do a memcpy to my unsigned char buf and send the data. On the recv side how to access the values inside my "buf". I tried the "*" operator, but i get a warning</p>
  
  <p>arning: passing argument 1 of âprintfâ makes pointer from integer without a cast</p>
  
  <p>I want to basically access the values inside buffer, as I know the size i should be able to repopulate my packet back. I know that this is a "C" question and not exactly "socket related". Any help would be really helpful.</p>