Блог пользователя 2017ceb1029

Автор 2017ceb1029, история, 4 года назад, По-английски

The problem link is : B level And it passes 20 tests but fails on 21st. In an online compiler "CODE" works fine, for the same test case, by failure I mean RUNTIME_ERROR. Any help would be appreciated. The same code first failed at test case 26th, which i noticed was due to less allocated memory when I tripled the allocated space, it fails at 21st case which gives correct output in the other compiler.

Thanks

  • Проголосовать: нравится
  • -5
  • Проголосовать: не нравится

»
4 года назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
char* c= (char* ) malloc(sizeof(char)*len);
scanf("%s",c);

Pretty sure scanf is based on null terminated strings so you need to allocate 1 more byte.

  • »
    »
    4 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    NO, i don't think the problem lies there. I had bounded the use of string by len and not using any /0 terminations. The accepted solution uses the same, only change being the next allocation.

    • »
      »
      »
      4 года назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Just so you know, it isn't up to you whether or not a null character is placed there. Currently scanf will always write outside of allocated memory. Maybe your runtime error was caused by something else, but that doesn't change the fact that something is being written outside of allocated memory.

    • »
      »
      »
      4 года назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      I just tried changing

      char* c= (char* ) malloc(sizeof(char)*len);
      

      into

      char* c= (char* ) malloc(sizeof(char)*(len + 1));
      

      and now it gets AC.