Advertisement
dllbridge

Untitled

Jan 15th, 2025 (edited)
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.04 KB | None | 0 0
  1. #include  <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include  <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. struct TT
  9. {
  10.    
  11.     int     n;                //  offset
  12.     int  nLen;                // strlen
  13.     TT *pNext;
  14. };
  15.  
  16. class LL
  17. {
  18.     public:
  19.        
  20.     TT *pHead;
  21.     TT *pTail;
  22.     int nCounter;
  23.    
  24.     char *pszBUF,
  25.          *pszPos;                 //  Позиция печати нового слова
  26.    
  27.          LL();
  28.     void  push(const char* psz);
  29.     void init();
  30.     void monitor();
  31. } L1;
  32.  
  33. int main()
  34. {
  35.  
  36.     L1.push(  "void"); 
  37.     L1.push(   "one");
  38.     L1.push(   "two");
  39.     L1.push( "three");
  40.     L1.push(  "SONY");    
  41.  
  42.  L1.monitor();
  43.  
  44.  
  45. return 0;
  46. }
  47.  
  48. LL::LL()
  49. {
  50.     pHead = 0;
  51.     pTail = 0;
  52.     nCounter = 0;
  53. }
  54. /////////////////////////////////////////////////
  55. void LL::push(const char* psz)
  56. {    
  57.      
  58.    
  59.     static int nSizeBuf =   0,
  60.                nStepBuf = 100;  
  61.                
  62.              
  63.      
  64.     if(nCounter == 0)
  65.     {
  66.        pszBUF = (char *)malloc (nStepBuf);  
  67.        
  68.        pszPos = pszBUF;    
  69.        
  70.        nSizeBuf = nStepBuf;                
  71.     }
  72.    
  73.    
  74.    
  75.     int nLen = strlen(psz);
  76.    
  77.    
  78.     // = = = = = = = = = =  
  79.     int nOffset = pszPos - pszBUF;  
  80.    
  81.     if(nOffset + nLen >=  nSizeBuf)
  82.     {
  83.        nSizeBuf += nStepBuf;        
  84.        pszBUF = (char *)realloc(pszBUF, nSizeBuf);
  85.        
  86.        pszPos = pszBUF + nOffset;      
  87.     }
  88.    
  89.     memcpy(pszPos, psz, nLen);
  90.    
  91.  
  92.    
  93.     TT *pp = (TT*)malloc(sizeof(TT));
  94.    
  95.  //   int        nOffset = pszPos - pszBUF ;
  96.     pp->n    = nOffset;
  97.     pp->nLen = nLen;               
  98.    
  99.    
  100.     pszPos += nLen;                  //  На будущее
  101.    
  102.     if(nCounter == 0)
  103.     {
  104.         pHead = pp;
  105.     }
  106.     else
  107.     {
  108.         pTail->pNext = pp;
  109.     }
  110.     nCounter++;
  111.     pp->pNext = 0; 
  112.     pTail = pp;
  113. }
  114. //////////////////////////////////////////////////
  115.  
  116. void LL::monitor()
  117. {
  118.     TT *p = pHead;
  119.    
  120.     for(int i = 0; i < nCounter; i++)
  121.     {
  122.         printf("n = %3d, %.*s\n", p->n, p->nLen, L1.pszBUF+p->n);
  123.         p = p->pNext;
  124.     }
  125. }
  126.  
  127.  
  128.  
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement