Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • 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
Code Project
  1. Home
  2. The Lounge
  3. Programming Question: C++ Builder String

Programming Question: C++ Builder String

Scheduled Pinned Locked Moved The Lounge
c++questionvisual-studioannouncementcareer
19 Posts 10 Posters 3 Views 1 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.
  • P Paul Selormey

    I was assigned to update an application created with the C++ Builder 6, but after trying the IDE and realized it is not even close to VC++ 4.x, I asked and got the permission to port the whole application to WTL. I was happily doing the porting until today, when I saw something "strange" and could not understand. Investigating further, it turns out that in BCB, this code found here...[^]

    String s = "My name is BillyBob";
    String sub = s.SubString(12, 8);

    will produce sub==BillyBob. Wow! No! that should throw an exception :confused: Then the notes claim the String indexing is a 1-based not a 0-based. :mad: Is there a C++Builder user here? Are you comfortable using that string class? I think you will need a double salary. Now, I have to say goodbye to my weekend X| Best regards, Paul.

    Jesus Christ is LOVE! Please tell somebody.

    L Offline
    L Offline
    leppie
    wrote on last edited by
    #2

    Paul Selormey wrote:

    Is there a C++Builder user here? Are you comfortable using that string class? I think you will need a double salary.

    No, they are all retired with that extra cash :)

    xacc.ide - now with TabsToSpaces support
    IronScheme - 1.0 beta 2 - out now!
    ((lambda (x) `((lambda (x) ,x) ',x)) '`((lambda (x) ,x) ',x))

    P Y 2 Replies Last reply
    0
    • L leppie

      Paul Selormey wrote:

      Is there a C++Builder user here? Are you comfortable using that string class? I think you will need a double salary.

      No, they are all retired with that extra cash :)

      xacc.ide - now with TabsToSpaces support
      IronScheme - 1.0 beta 2 - out now!
      ((lambda (x) `((lambda (x) ,x) ',x)) '`((lambda (x) ,x) ',x))

      P Offline
      P Offline
      Paul Selormey
      wrote on last edited by
      #3

      leppie wrote:

      No, they are all retired with that extra cash

      Thank God, I will have less to do. :-D Best regards, Paul.

      Jesus Christ is LOVE! Please tell somebody.

      1 Reply Last reply
      0
      • P Paul Selormey

        I was assigned to update an application created with the C++ Builder 6, but after trying the IDE and realized it is not even close to VC++ 4.x, I asked and got the permission to port the whole application to WTL. I was happily doing the porting until today, when I saw something "strange" and could not understand. Investigating further, it turns out that in BCB, this code found here...[^]

        String s = "My name is BillyBob";
        String sub = s.SubString(12, 8);

        will produce sub==BillyBob. Wow! No! that should throw an exception :confused: Then the notes claim the String indexing is a 1-based not a 0-based. :mad: Is there a C++Builder user here? Are you comfortable using that string class? I think you will need a double salary. Now, I have to say goodbye to my weekend X| Best regards, Paul.

        Jesus Christ is LOVE! Please tell somebody.

        M Offline
        M Offline
        Miszou
        wrote on last edited by
        #4

        I had a job using C++ Builder once... and after fighting with the hideous UI, bizarre language constructs and weird object library I refused to use it. Since all my code was COM objects anyway, it really didn't matter what language it was written in, so I wrote it all in MSVC. The fact that it had to throw up a dialog when compiling and totally prevented you from doing anything else was pretty lame too. I also recall a lovely feature, whereby that the compiler would automatically assume a particular return type if you accidentally forgot to specify a type in the declaration for a function. Now, I do realize that this is a K&R "feature" (default to int or somesuch), but most sane compilers will at least put up a warning. Builder just compiles it anyway, puts god-knows-what on the stack and then has a seizure when you try to use the function. There's nothing to indicate what the problem is, it just fails. No compiler warning and nothing useful anywhere. I wasted an entire afternoon on this crap, totally unable to see the forest for the trees. A simple warning would have been so nice... Well, it's 11pm and time for bed. I think I'm going to have those nightmare again, damn you! ;P

        The StartPage Randomizer - The Windows Cheerleader - Twitter

        P 1 Reply Last reply
        0
        • P Paul Selormey

          I was assigned to update an application created with the C++ Builder 6, but after trying the IDE and realized it is not even close to VC++ 4.x, I asked and got the permission to port the whole application to WTL. I was happily doing the porting until today, when I saw something "strange" and could not understand. Investigating further, it turns out that in BCB, this code found here...[^]

          String s = "My name is BillyBob";
          String sub = s.SubString(12, 8);

          will produce sub==BillyBob. Wow! No! that should throw an exception :confused: Then the notes claim the String indexing is a 1-based not a 0-based. :mad: Is there a C++Builder user here? Are you comfortable using that string class? I think you will need a double salary. Now, I have to say goodbye to my weekend X| Best regards, Paul.

          Jesus Christ is LOVE! Please tell somebody.

          K Offline
          K Offline
          ktm TechMan
          wrote on last edited by
          #5

          Yes we have BCB 6 in our project for quite some time now, and after some time you get the hang of it. You can always use the std::string class, thats the flexibility.

          P J 2 Replies Last reply
          0
          • M Miszou

            I had a job using C++ Builder once... and after fighting with the hideous UI, bizarre language constructs and weird object library I refused to use it. Since all my code was COM objects anyway, it really didn't matter what language it was written in, so I wrote it all in MSVC. The fact that it had to throw up a dialog when compiling and totally prevented you from doing anything else was pretty lame too. I also recall a lovely feature, whereby that the compiler would automatically assume a particular return type if you accidentally forgot to specify a type in the declaration for a function. Now, I do realize that this is a K&R "feature" (default to int or somesuch), but most sane compilers will at least put up a warning. Builder just compiles it anyway, puts god-knows-what on the stack and then has a seizure when you try to use the function. There's nothing to indicate what the problem is, it just fails. No compiler warning and nothing useful anywhere. I wasted an entire afternoon on this crap, totally unable to see the forest for the trees. A simple warning would have been so nice... Well, it's 11pm and time for bed. I think I'm going to have those nightmare again, damn you! ;P

            The StartPage Randomizer - The Windows Cheerleader - Twitter

            P Offline
            P Offline
            Paul Selormey
            wrote on last edited by
            #6

            Miszou wrote:

            I'm going to have those nightmare again, damn you!

            Forgive me, I am writing from Japan and it is still day. I was told these pictures[^] might help. :^) Best regards, Paul.

            Jesus Christ is LOVE! Please tell somebody.

            1 Reply Last reply
            0
            • K ktm TechMan

              Yes we have BCB 6 in our project for quite some time now, and after some time you get the hang of it. You can always use the std::string class, thats the flexibility.

              P Offline
              P Offline
              Paul Selormey
              wrote on last edited by
              #7

              ktm TechMan wrote:

              Yes we have BCB 6 in our project for quite some time now

              How long did it take you to get the hang of it?

              ktm TechMan wrote:

              You can always use the std::string class, thats the flexibility.

              That is the problem, how do you cope with that (Programming in both C++ and VB in the same source, I have done MC++, but it does not seem close!)? Best regards, Paul.

              Jesus Christ is LOVE! Please tell somebody.

              1 Reply Last reply
              0
              • P Paul Selormey

                I was assigned to update an application created with the C++ Builder 6, but after trying the IDE and realized it is not even close to VC++ 4.x, I asked and got the permission to port the whole application to WTL. I was happily doing the porting until today, when I saw something "strange" and could not understand. Investigating further, it turns out that in BCB, this code found here...[^]

                String s = "My name is BillyBob";
                String sub = s.SubString(12, 8);

                will produce sub==BillyBob. Wow! No! that should throw an exception :confused: Then the notes claim the String indexing is a 1-based not a 0-based. :mad: Is there a C++Builder user here? Are you comfortable using that string class? I think you will need a double salary. Now, I have to say goodbye to my weekend X| Best regards, Paul.

                Jesus Christ is LOVE! Please tell somebody.

                R Offline
                R Offline
                rastaVnuce
                wrote on last edited by
                #8

                Paul Selormey wrote:

                will produce sub==BillyBob. Wow! No! that should throw an exception Confused

                Why an exception? Shouldn't sub become "illyBob" ? We agree on the 0-based index. It is an awful idea to present anything different that a 0-based index in C/C++ world. But, I don't think it would be good to throw an exception because there aren't 8 characters left for the whole sub string to fill up. (I presume that's why you think an exception is required?)

                To hell with circumstances; I create opportunities.

                P 1 Reply Last reply
                0
                • R rastaVnuce

                  Paul Selormey wrote:

                  will produce sub==BillyBob. Wow! No! that should throw an exception Confused

                  Why an exception? Shouldn't sub become "illyBob" ? We agree on the 0-based index. It is an awful idea to present anything different that a 0-based index in C/C++ world. But, I don't think it would be good to throw an exception because there aren't 8 characters left for the whole sub string to fill up. (I presume that's why you think an exception is required?)

                  To hell with circumstances; I create opportunities.

                  P Offline
                  P Offline
                  Paul Selormey
                  wrote on last edited by
                  #9

                  rastaVnuce wrote:

                  Why an exception?

                  May be I should have added s.Length == 19, so that you do not need the count.

                  rastaVnuce wrote:

                  Shouldn't sub become "illyBob" ?

                  Length("illyBob") == 7. Best regards, Paul.

                  Jesus Christ is LOVE! Please tell somebody.

                  R 1 Reply Last reply
                  0
                  • P Paul Selormey

                    rastaVnuce wrote:

                    Why an exception?

                    May be I should have added s.Length == 19, so that you do not need the count.

                    rastaVnuce wrote:

                    Shouldn't sub become "illyBob" ?

                    Length("illyBob") == 7. Best regards, Paul.

                    Jesus Christ is LOVE! Please tell somebody.

                    R Offline
                    R Offline
                    rastaVnuce
                    wrote on last edited by
                    #10

                    I am aware of both strings' lengths. My point is... it's much more convenient to have substring return shorter string, that throw an exception.

                    To hell with circumstances; I create opportunities.

                    P 1 Reply Last reply
                    0
                    • P Paul Selormey

                      I was assigned to update an application created with the C++ Builder 6, but after trying the IDE and realized it is not even close to VC++ 4.x, I asked and got the permission to port the whole application to WTL. I was happily doing the porting until today, when I saw something "strange" and could not understand. Investigating further, it turns out that in BCB, this code found here...[^]

                      String s = "My name is BillyBob";
                      String sub = s.SubString(12, 8);

                      will produce sub==BillyBob. Wow! No! that should throw an exception :confused: Then the notes claim the String indexing is a 1-based not a 0-based. :mad: Is there a C++Builder user here? Are you comfortable using that string class? I think you will need a double salary. Now, I have to say goodbye to my weekend X| Best regards, Paul.

                      Jesus Christ is LOVE! Please tell somebody.

                      B Offline
                      B Offline
                      blackjack2150
                      wrote on last edited by
                      #11

                      I did a cards game in BCB 6 in my 2nd year in college. It was the first nontrivial program that had a UI and then I liked how easy it was to design the forms. VC++ 6 was a mystery to me as I couldn't stand that class wizard way of doing things. What I absolutely hated about BCB was that if you had an error in the source code, even a missing semicolon, the Code Complete feature would not work anymore. Awful!

                      1 Reply Last reply
                      0
                      • P Paul Selormey

                        I was assigned to update an application created with the C++ Builder 6, but after trying the IDE and realized it is not even close to VC++ 4.x, I asked and got the permission to port the whole application to WTL. I was happily doing the porting until today, when I saw something "strange" and could not understand. Investigating further, it turns out that in BCB, this code found here...[^]

                        String s = "My name is BillyBob";
                        String sub = s.SubString(12, 8);

                        will produce sub==BillyBob. Wow! No! that should throw an exception :confused: Then the notes claim the String indexing is a 1-based not a 0-based. :mad: Is there a C++Builder user here? Are you comfortable using that string class? I think you will need a double salary. Now, I have to say goodbye to my weekend X| Best regards, Paul.

                        Jesus Christ is LOVE! Please tell somebody.

                        D Offline
                        D Offline
                        Dave Parker
                        wrote on last edited by
                        #12

                        In the one C++ module we had at university ( most of it was in java :( ) we had to use Borland Builder. Never liked it, it doesn't even seem like C/C++ to me it's more of some weird delphi / C++ hybrid thing that crashes a lot. Where possible (such as for console apps for which I wouldn't get penalized for not using VCL or whatever borland's framework was called) I used VC++ 6 on my own PC instead and just didn't use any compiler-specific extensions.

                        Y 1 Reply Last reply
                        0
                        • P Paul Selormey

                          I was assigned to update an application created with the C++ Builder 6, but after trying the IDE and realized it is not even close to VC++ 4.x, I asked and got the permission to port the whole application to WTL. I was happily doing the porting until today, when I saw something "strange" and could not understand. Investigating further, it turns out that in BCB, this code found here...[^]

                          String s = "My name is BillyBob";
                          String sub = s.SubString(12, 8);

                          will produce sub==BillyBob. Wow! No! that should throw an exception :confused: Then the notes claim the String indexing is a 1-based not a 0-based. :mad: Is there a C++Builder user here? Are you comfortable using that string class? I think you will need a double salary. Now, I have to say goodbye to my weekend X| Best regards, Paul.

                          Jesus Christ is LOVE! Please tell somebody.

                          N Offline
                          N Offline
                          Niall Barr
                          wrote on last edited by
                          #13

                          Many years ago I ported an app from Turbo C++ to VC++ - one quirk of Turbo was that it had a class that encapsulated Pascal style strings where the first character of the structure is the string length, so the actual string starts at offset 1 (and is limited to 255 characters).

                          P 1 Reply Last reply
                          0
                          • R rastaVnuce

                            I am aware of both strings' lengths. My point is... it's much more convenient to have substring return shorter string, that throw an exception.

                            To hell with circumstances; I create opportunities.

                            P Offline
                            P Offline
                            Paul Selormey
                            wrote on last edited by
                            #14

                            rastaVnuce wrote:

                            it's much more convenient to have substring return shorter string, that throw an exception.

                            It is not about convenience, but correctness, which I think is more important to avoid problems in programming tasks. In this case, the request is beyond the content, and as in any array operation, it should not be allowed. You can easily check this before making the call to the array, if you do not want an exception. Best regards, Paul.

                            Jesus Christ is LOVE! Please tell somebody.

                            1 Reply Last reply
                            0
                            • N Niall Barr

                              Many years ago I ported an app from Turbo C++ to VC++ - one quirk of Turbo was that it had a class that encapsulated Pascal style strings where the first character of the structure is the string length, so the actual string starts at offset 1 (and is limited to 255 characters).

                              P Offline
                              P Offline
                              Paul Selormey
                              wrote on last edited by
                              #15

                              This might explain the issue. They are most likely using the Delphi library for the C++ Builder, I do not know how many C++ Developers will like that joke. Best regards, Paul.

                              Jesus Christ is LOVE! Please tell somebody.

                              Y 1 Reply Last reply
                              0
                              • K ktm TechMan

                                Yes we have BCB 6 in our project for quite some time now, and after some time you get the hang of it. You can always use the std::string class, thats the flexibility.

                                J Offline
                                J Offline
                                Joe Woodbury
                                wrote on last edited by
                                #16

                                std:string is the lamest string class I've ever used.

                                Anyone who thinks he has a better idea of what's good for people than people do is a swine. - P.J. O'Rourke

                                1 Reply Last reply
                                0
                                • L leppie

                                  Paul Selormey wrote:

                                  Is there a C++Builder user here? Are you comfortable using that string class? I think you will need a double salary.

                                  No, they are all retired with that extra cash :)

                                  xacc.ide - now with TabsToSpaces support
                                  IronScheme - 1.0 beta 2 - out now!
                                  ((lambda (x) `((lambda (x) ,x) ',x)) '`((lambda (x) ,x) ',x))

                                  Y Offline
                                  Y Offline
                                  Yayozama
                                  wrote on last edited by
                                  #17

                                  leppie wrote:

                                  No, they are all retired with that extra cash Smile

                                  Sorry, with all the pain in my heart I have to say that I still programme in Builder 6 (well... me and 30+ other peoples in my office :~) And... to put salt in the cut, we dont have free internet access (we can only check microsoft, java, Codeproject and a few other webpages). The fear of the owners in the change of technology is amazing... Cheers!

                                  1 Reply Last reply
                                  0
                                  • D Dave Parker

                                    In the one C++ module we had at university ( most of it was in java :( ) we had to use Borland Builder. Never liked it, it doesn't even seem like C/C++ to me it's more of some weird delphi / C++ hybrid thing that crashes a lot. Where possible (such as for console apps for which I wouldn't get penalized for not using VCL or whatever borland's framework was called) I used VC++ 6 on my own PC instead and just didn't use any compiler-specific extensions.

                                    Y Offline
                                    Y Offline
                                    Yayozama
                                    wrote on last edited by
                                    #18

                                    Dave Parker wrote:

                                    Never liked it, it doesn't even seem like C/C++ to me it's more of some weird delphi / C++ hybrid thing that crashes a lot.

                                    I have 3 or 4 crashes per day (in B6... in B5 had way more) And (by the law of Murphy) they happens in the worst moment possible.

                                    1 Reply Last reply
                                    0
                                    • P Paul Selormey

                                      This might explain the issue. They are most likely using the Delphi library for the C++ Builder, I do not know how many C++ Developers will like that joke. Best regards, Paul.

                                      Jesus Christ is LOVE! Please tell somebody.

                                      Y Offline
                                      Y Offline
                                      Yayozama
                                      wrote on last edited by
                                      #19

                                      Well, Builder 5 (and 6) is builded under Delphi. By the way, the use of the strings is really a PITA in Builder (even using the AnsiString), and some things use the 0-index, others use the -1-index and a few others use the 1-index... (and try to remember all that when in the other time part job you use VB.net or C# :sigh: ) And we are not even mentioning the pointers and double pointers (and how use them with all the different data types X| ). Cheers!

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


                                      • Login

                                      • Don't have an account? Register

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • World
                                      • Users
                                      • Groups