1. Си / Говнокод #25803

    −2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    
    char** explode(char* inaddr, char s)
    {
    char**  xxx;
    xxx=(char**)malloc(strlen(inaddr));
    char* temp;
    temp=(char*)malloc(strlen(inaddr));
    
    int u=0,i=0,t=0;
    
    char* getln(char *addr)
    {
    while (*(addr+i) !=s && *(addr+i) !='\0' && *(addr+i) !=EOF)
    {temp[t]=inaddr[i];t++;i++;};
    temp[t]='\0';
    i++;t=0;
    return(temp);
    }
    
    while (inaddr[i])
    {
    xxx[u]=strdup(getln(inaddr));
    u++;
    };
    return(xxx);
    };
    
    //для проверки результата
    char* str="Y000:aa;dsf;dddsf;dsfdsf;1YYYYY;YYYYY;YYYYYY;sfd:sfdsfdsfdsfdsfdsfdsfdsf1YYYYYYY:YYYYYYYYY;b;cc;Ydsfds;876786876a:1132";
    char** eee;
    eee=(char**)malloc(strlen(str));
    
    
    eee=explode(str, ';');
    
    int zz=0;
    while(eee[zz])
    {
      printf("%s\n",eee[zz] );zz++;
    };
    printf("%c",eee[0][0] );
    printf("\n" );
    
    }

    функция explode() как php давно о такой мечтал.

    Запостил: killer1804, 04 Сентября 2019

    Комментарии (21) RSS

    • Осталось добавить explosion() и тип данных explosive
      Ответить
    • Ещё и с утечками...
      Ответить
      • P.S. Поясню:
        eee=(char**)malloc(strlen(str)); // тут мы выделили память и указатель сохранили в eee
        
        
        eee=explode(str, ';'); // а тут мы затёрли указатель на выделенный блок результатом вызова функции explode
        // теперь блок, выделенный несколькими строками выше, стал космическим мусором


        Не надо так.
        Ответить
    • Переведите на форматированный с, пожалуйста
      Ответить
      • #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
        
        int main(int argc, char* argv[]) {
          char** explode(char* inaddr, char s) {
            char** xxx;
            xxx = (char**)malloc(strlen(inaddr));
            char* temp;
            temp = (char*)malloc(strlen(inaddr));
        
            int u = 0, i = 0, t = 0;
        
            char* getln(char* addr) {
              while (*(addr + i) != s && *(addr + i) != '\0' && *(addr + i) != EOF) {
                temp[t] = inaddr[i];
                t++;
                i++;
              };
              temp[t] = '\0';
              i++;
              t = 0;
              return (temp);
            }
        
            while (inaddr[i]) {
              xxx[u] = strdup(getln(inaddr));
              u++;
            };
            return (xxx);
          };
        
          //для проверки результата
          char* str =
              "Y000:aa;dsf;dddsf;dsfdsf;1YYYYY;YYYYY;YYYYYY;sfd:"
              "sfdsfdsfdsfdsfdsfdsfdsf1YYYYYYY:YYYYYYYYY;b;cc;Ydsfds;876786876a:1132";
          char** eee;
          eee = (char**)malloc(strlen(str));
        
          eee = explode(str, ';');
        
          int zz = 0;
          while (eee[zz]) {
            printf("%s\n", eee[zz]);
            zz++;
          };
          printf("%c", eee[0][0]);
          printf("\n");
        }
        Ответить
    • Warning! Explosive material!
      Ответить
    • *(addr + i) == addr[i]
      Ответить
      • addr[i] == *(addr + i) == *(i + addr) == i[addr]
        Ответить
        • Как всё сложно... К счастью, в «PHP» никакой арифметики указателей нет. Да и самих указателей нет...
          Ответить
      • ЛОООЛ
        Видел такой хак на одном из делфефорумов, применительно к PChar.
        Ответить
    • Скажите это слово!
      WORD   e_cblp;
      Ответить

    Добавить комментарий