Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Troubleshooting
  3. Dynamic change of variable name

Dynamic change of variable name

Scheduled Pinned Locked Moved Troubleshooting
14 Posts 7 Posters 587 Views 6 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • skywatchS skywatch

    @yveaux Shouldn't that be int value[4]; ? ;)

    mfalkviddM Offline
    mfalkviddM Offline
    mfalkvidd
    Mod
    wrote on last edited by
    #5

    @skywatch not if the 0th position is skipped

    skywatchS 1 Reply Last reply
    1
    • mfalkviddM mfalkvidd

      @skywatch not if the 0th position is skipped

      skywatchS Offline
      skywatchS Offline
      skywatch
      wrote on last edited by
      #6

      @mfalkvidd Hehehe...... ;)

      But i starts at 1 yes? and then increments in interger units whilst it is less than 5. So that should give 1,2,3,4. Or have I been under a misunderstanding?

      mfalkviddM 1 Reply Last reply
      0
      • skywatchS skywatch

        @mfalkvidd Hehehe...... ;)

        But i starts at 1 yes? and then increments in interger units whilst it is less than 5. So that should give 1,2,3,4. Or have I been under a misunderstanding?

        mfalkviddM Offline
        mfalkviddM Offline
        mfalkvidd
        Mod
        wrote on last edited by
        #7

        @skywatch arrays indexes in c/c++ always start at 0.
        int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

        So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

        int value[4];
        for (i=0; i<4; i++){
          value[i] = debouncer[i].read();
        }
        
        Sergio RiusS skywatchS 2 Replies Last reply
        0
        • mfalkviddM mfalkvidd

          @skywatch arrays indexes in c/c++ always start at 0.
          int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

          So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

          int value[4];
          for (i=0; i<4; i++){
            value[i] = debouncer[i].read();
          }
          
          Sergio RiusS Offline
          Sergio RiusS Offline
          Sergio Rius
          wrote on last edited by Sergio Rius
          #8

          @mfalkvidd said in Dynamic change of variable name:

          int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

          So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

          In fact, I interpreted it more like @skywatch
          Notice the <=

           int value[5];
           for (i=1; i<=5; i++){
             value[i] = debouncer[i].read();
           }
          

          I just made something like this for indexing sensors in a node, where idx 0 was the node itself, and thus already filled before the loop.

          YveauxY 1 Reply Last reply
          0
          • Sergio RiusS Sergio Rius

            @mfalkvidd said in Dynamic change of variable name:

            int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

            So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

            In fact, I interpreted it more like @skywatch
            Notice the <=

             int value[5];
             for (i=1; i<=5; i++){
               value[i] = debouncer[i].read();
             }
            

            I just made something like this for indexing sensors in a node, where idx 0 was the node itself, and thus already filled before the loop.

            YveauxY Offline
            YveauxY Offline
            Yveaux
            Mod
            wrote on last edited by
            #9

            @sergio-rius said in Dynamic change of variable name:

            Notice the <=

            That will cause a buffer overrun at the end again...

            http://yveaux.blogspot.nl

            skywatchS Sergio RiusS 2 Replies Last reply
            2
            • YveauxY Yveaux

              @sergio-rius said in Dynamic change of variable name:

              Notice the <=

              That will cause a buffer overrun at the end again...

              skywatchS Offline
              skywatchS Offline
              skywatch
              wrote on last edited by
              #10

              @yveaux Can you please explain why as I want to learn why it won't run the code the way I expected it to! -

              1 Reply Last reply
              0
              • mfalkviddM mfalkvidd

                @skywatch arrays indexes in c/c++ always start at 0.
                int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

                So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

                int value[4];
                for (i=0; i<4; i++){
                  value[i] = debouncer[i].read();
                }
                
                skywatchS Offline
                skywatchS Offline
                skywatch
                wrote on last edited by skywatch
                #11

                @mfalkvidd That won't get '0 through 4' as it will never produce i=4 in this case. I would expect it to need to be

                int value[4];
                for (i=0; i<=4; i++){
                  value[i] = debouncer[i].read();
                }
                

                in order to get 0 through 4 (note the extra '=' in line 2 above to make this work. Or am I still misunderstanding something? ???

                1 Reply Last reply
                0
                • YveauxY Yveaux

                  @sergio-rius said in Dynamic change of variable name:

                  Notice the <=

                  That will cause a buffer overrun at the end again...

                  Sergio RiusS Offline
                  Sergio RiusS Offline
                  Sergio Rius
                  wrote on last edited by
                  #12

                  It's as easy as trying it.

                  @yveaux said in Dynamic change of variable name:

                  That will cause a buffer overrun at the end again...

                  Really? I can't see why a loop trough 1, 2, 3, 4 could overflow a 5 elements array.

                  In my code, I manually add 0 (the device itself, for vcc) before entering the loop. So in this case, still 5 elements.

                  badmannenB 1 Reply Last reply
                  0
                  • Sergio RiusS Sergio Rius

                    It's as easy as trying it.

                    @yveaux said in Dynamic change of variable name:

                    That will cause a buffer overrun at the end again...

                    Really? I can't see why a loop trough 1, 2, 3, 4 could overflow a 5 elements array.

                    In my code, I manually add 0 (the device itself, for vcc) before entering the loop. So in this case, still 5 elements.

                    badmannenB Offline
                    badmannenB Offline
                    badmannen
                    wrote on last edited by
                    #13

                    @sergio-rius
                    the loop will run even at "5".
                    that is the problem. if you write "i<5" , then it would be ok

                    rPi 3 - UNO R3 - Mini - Nano - custom

                    1 Reply Last reply
                    0
                    • Sergio RiusS Offline
                      Sergio RiusS Offline
                      Sergio Rius
                      wrote on last edited by
                      #14

                      @badmannen @Yveaux You're absolutely right. I was lazy, only changed a symbol and gave a bad advice. My response should be changed to <=4.

                      Still I don't understand what the original question was.

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      19

                      Online

                      11.7k

                      Users

                      11.2k

                      Topics

                      113.1k

                      Posts


                      Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • MySensors
                      • OpenHardware.io
                      • Categories
                      • Recent
                      • Tags
                      • Popular