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. General Programming
  3. C / C++ / MFC
  4. Problem using strings

Problem using strings

Scheduled Pinned Locked Moved C / C++ / MFC
helpasp-netcomquestion
18 Posts 11 Posters 0 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.
  • R Offline
    R Offline
    Rodrigo Lourenco
    wrote on last edited by
    #1

    I'm trying to change a given string in a function, but I send a string, try to change it directly and get a core dump, so I tried to create a string in the function, but it doesn't send the correct string. This function must eliminate all Capital letter's it's a simple one, but I am making a mistake and don't see where. Can any one help me please.

    #include #include #include #include #define false 1
    #define true 0

    char* my_strdelupper(char* s){

      int i,j, len;
      char aux\[100\];
      char debuging;
    
      len = strlen(s);
      j = 0;
      for (i = 0; \*(s + i) != '\\0' < len; i++){
          if (!isupper(\*(s+i))){
              printf("%c",\*(s+i));
              debuging = \*(s + i);
              \*(aux + j) = debuging;
             j++;
          }
      }
      \*(aux + j) = '\\0';
      printf("\\n");
      puts(aux);
    
      return strcpy(aux, aux);
    

    }

    int main()
    {
    char *s3="Quem quer casar com um programador?";
    printf("%s\n",my_strdelupper(s3)); /* aria, sabes que é s o meu "rande mor " */

    return 0;
    }

    V K D J L 6 Replies Last reply
    0
    • R Rodrigo Lourenco

      I'm trying to change a given string in a function, but I send a string, try to change it directly and get a core dump, so I tried to create a string in the function, but it doesn't send the correct string. This function must eliminate all Capital letter's it's a simple one, but I am making a mistake and don't see where. Can any one help me please.

      #include #include #include #include #define false 1
      #define true 0

      char* my_strdelupper(char* s){

        int i,j, len;
        char aux\[100\];
        char debuging;
      
        len = strlen(s);
        j = 0;
        for (i = 0; \*(s + i) != '\\0' < len; i++){
            if (!isupper(\*(s+i))){
                printf("%c",\*(s+i));
                debuging = \*(s + i);
                \*(aux + j) = debuging;
               j++;
            }
        }
        \*(aux + j) = '\\0';
        printf("\\n");
        puts(aux);
      
        return strcpy(aux, aux);
      

      }

      int main()
      {
      char *s3="Quem quer casar com um programador?";
      printf("%s\n",my_strdelupper(s3)); /* aria, sabes que é s o meu "rande mor " */

      return 0;
      }

      V Offline
      V Offline
      Victor Nijegorodov
      wrote on last edited by
      #2

      Why not using the std::string with all its and other std methods? :zzz: :confused:

      R M 2 Replies Last reply
      0
      • R Rodrigo Lourenco

        I'm trying to change a given string in a function, but I send a string, try to change it directly and get a core dump, so I tried to create a string in the function, but it doesn't send the correct string. This function must eliminate all Capital letter's it's a simple one, but I am making a mistake and don't see where. Can any one help me please.

        #include #include #include #include #define false 1
        #define true 0

        char* my_strdelupper(char* s){

          int i,j, len;
          char aux\[100\];
          char debuging;
        
          len = strlen(s);
          j = 0;
          for (i = 0; \*(s + i) != '\\0' < len; i++){
              if (!isupper(\*(s+i))){
                  printf("%c",\*(s+i));
                  debuging = \*(s + i);
                  \*(aux + j) = debuging;
                 j++;
              }
          }
          \*(aux + j) = '\\0';
          printf("\\n");
          puts(aux);
        
          return strcpy(aux, aux);
        

        }

        int main()
        {
        char *s3="Quem quer casar com um programador?";
        printf("%s\n",my_strdelupper(s3)); /* aria, sabes que é s o meu "rande mor " */

        return 0;
        }

        K Offline
        K Offline
        k5054
        wrote on last edited by
        #3

        You have: char *s3 = "...". Although s3 is declared as char * the type of the string is const char *. Use char s3[] = "..." instead.

        R 1 Reply Last reply
        0
        • R Rodrigo Lourenco

          I'm trying to change a given string in a function, but I send a string, try to change it directly and get a core dump, so I tried to create a string in the function, but it doesn't send the correct string. This function must eliminate all Capital letter's it's a simple one, but I am making a mistake and don't see where. Can any one help me please.

          #include #include #include #include #define false 1
          #define true 0

          char* my_strdelupper(char* s){

            int i,j, len;
            char aux\[100\];
            char debuging;
          
            len = strlen(s);
            j = 0;
            for (i = 0; \*(s + i) != '\\0' < len; i++){
                if (!isupper(\*(s+i))){
                    printf("%c",\*(s+i));
                    debuging = \*(s + i);
                    \*(aux + j) = debuging;
                   j++;
                }
            }
            \*(aux + j) = '\\0';
            printf("\\n");
            puts(aux);
          
            return strcpy(aux, aux);
          

          }

          int main()
          {
          char *s3="Quem quer casar com um programador?";
          printf("%s\n",my_strdelupper(s3)); /* aria, sabes que é s o meu "rande mor " */

          return 0;
          }

          D Offline
          D Offline
          David Crow
          wrote on last edited by
          #4

          If I were to hazard a guess, I'd say it has to do with aux being destroyed (i.e., going out of scope) once my_strdelupper() returns.

          "One man's wage rise is another man's price increase." - Harold Wilson

          "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

          "You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles

          R 1 Reply Last reply
          0
          • R Rodrigo Lourenco

            I'm trying to change a given string in a function, but I send a string, try to change it directly and get a core dump, so I tried to create a string in the function, but it doesn't send the correct string. This function must eliminate all Capital letter's it's a simple one, but I am making a mistake and don't see where. Can any one help me please.

            #include #include #include #include #define false 1
            #define true 0

            char* my_strdelupper(char* s){

              int i,j, len;
              char aux\[100\];
              char debuging;
            
              len = strlen(s);
              j = 0;
              for (i = 0; \*(s + i) != '\\0' < len; i++){
                  if (!isupper(\*(s+i))){
                      printf("%c",\*(s+i));
                      debuging = \*(s + i);
                      \*(aux + j) = debuging;
                     j++;
                  }
              }
              \*(aux + j) = '\\0';
              printf("\\n");
              puts(aux);
            
              return strcpy(aux, aux);
            

            }

            int main()
            {
            char *s3="Quem quer casar com um programador?";
            printf("%s\n",my_strdelupper(s3)); /* aria, sabes que é s o meu "rande mor " */

            return 0;
            }

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

            This line of code puzzles me:

            *(s + i) != '\0' < len

            It probably should be:

            i < len

            A second problem is that you are doing the copy only on !isupper, when you should be doing it always as soon as an uppercase character is detected. A third problem is the strcpy() at the end. It's pointless. A fourth problem is that you are returning a pointer to the a stack value which becomes invalid because the call to printf is likely overwriting it and is likely causing a fault.

            R 1 Reply Last reply
            0
            • R Rodrigo Lourenco

              I'm trying to change a given string in a function, but I send a string, try to change it directly and get a core dump, so I tried to create a string in the function, but it doesn't send the correct string. This function must eliminate all Capital letter's it's a simple one, but I am making a mistake and don't see where. Can any one help me please.

              #include #include #include #include #define false 1
              #define true 0

              char* my_strdelupper(char* s){

                int i,j, len;
                char aux\[100\];
                char debuging;
              
                len = strlen(s);
                j = 0;
                for (i = 0; \*(s + i) != '\\0' < len; i++){
                    if (!isupper(\*(s+i))){
                        printf("%c",\*(s+i));
                        debuging = \*(s + i);
                        \*(aux + j) = debuging;
                       j++;
                    }
                }
                \*(aux + j) = '\\0';
                printf("\\n");
                puts(aux);
              
                return strcpy(aux, aux);
              

              }

              int main()
              {
              char *s3="Quem quer casar com um programador?";
              printf("%s\n",my_strdelupper(s3)); /* aria, sabes que é s o meu "rande mor " */

              return 0;
              }

              L Offline
              L Offline
              Lost User
              wrote on last edited by
              #6

              Try this:

              char* my_strdelupper(char* s){
              int i, len;
              char* sl;

              len = strlen(s);
              sl = (char\*)malloc(len+1); // space for the converted string
              i = 0; // index to the converted string buffer
              while (\*s != '\\0'){
                  if (!isupper(\*s)){
                      sl\[i++\] = \*s; // copy lower case letters
                  }
                  s++;
              }
              sl\[i\] = '\\0';
              printf("%s\\n", sl);
              
              return sl;
              

              }

              R 1 Reply Last reply
              0
              • V Victor Nijegorodov

                Why not using the std::string with all its and other std methods? :zzz: :confused:

                R Offline
                R Offline
                Rodrigo Lourenco
                wrote on last edited by
                #7

                I'm working with C

                1 Reply Last reply
                0
                • J Joe Woodbury

                  This line of code puzzles me:

                  *(s + i) != '\0' < len

                  It probably should be:

                  i < len

                  A second problem is that you are doing the copy only on !isupper, when you should be doing it always as soon as an uppercase character is detected. A third problem is the strcpy() at the end. It's pointless. A fourth problem is that you are returning a pointer to the a stack value which becomes invalid because the call to printf is likely overwriting it and is likely causing a fault.

                  R Offline
                  R Offline
                  Rodrigo Lourenco
                  wrote on last edited by
                  #8

                  You are correct, that was one mistake, but it should be *(s + i) != '\0' because I am searching for the end of line.

                  1 Reply Last reply
                  0
                  • L Lost User

                    Try this:

                    char* my_strdelupper(char* s){
                    int i, len;
                    char* sl;

                    len = strlen(s);
                    sl = (char\*)malloc(len+1); // space for the converted string
                    i = 0; // index to the converted string buffer
                    while (\*s != '\\0'){
                        if (!isupper(\*s)){
                            sl\[i++\] = \*s; // copy lower case letters
                        }
                        s++;
                    }
                    sl\[i\] = '\\0';
                    printf("%s\\n", sl);
                    
                    return sl;
                    

                    }

                    R Offline
                    R Offline
                    Rodrigo Lourenco
                    wrote on last edited by
                    #9

                    The stupid thing is that I can't use malloc, so I made a char array with fixed size to overcame that problem.

                    1 Reply Last reply
                    0
                    • D David Crow

                      If I were to hazard a guess, I'd say it has to do with aux being destroyed (i.e., going out of scope) once my_strdelupper() returns.

                      "One man's wage rise is another man's price increase." - Harold Wilson

                      "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                      "You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles

                      R Offline
                      R Offline
                      Rodrigo Lourenco
                      wrote on last edited by
                      #10

                      I think you are correct, but I tried to copy aux to s and didn't work, now I changed the code to send an array, them befour I leave I copy using srtcpy aux to s, and it's working.

                      1 Reply Last reply
                      0
                      • K k5054

                        You have: char *s3 = "...". Although s3 is declared as char * the type of the string is const char *. Use char s3[] = "..." instead.

                        R Offline
                        R Offline
                        Rodrigo Lourenco
                        wrote on last edited by
                        #11

                        It worked thanks

                        1 Reply Last reply
                        0
                        • R Rodrigo Lourenco

                          I'm trying to change a given string in a function, but I send a string, try to change it directly and get a core dump, so I tried to create a string in the function, but it doesn't send the correct string. This function must eliminate all Capital letter's it's a simple one, but I am making a mistake and don't see where. Can any one help me please.

                          #include #include #include #include #define false 1
                          #define true 0

                          char* my_strdelupper(char* s){

                            int i,j, len;
                            char aux\[100\];
                            char debuging;
                          
                            len = strlen(s);
                            j = 0;
                            for (i = 0; \*(s + i) != '\\0' < len; i++){
                                if (!isupper(\*(s+i))){
                                    printf("%c",\*(s+i));
                                    debuging = \*(s + i);
                                    \*(aux + j) = debuging;
                                   j++;
                                }
                            }
                            \*(aux + j) = '\\0';
                            printf("\\n");
                            puts(aux);
                          
                            return strcpy(aux, aux);
                          

                          }

                          int main()
                          {
                          char *s3="Quem quer casar com um programador?";
                          printf("%s\n",my_strdelupper(s3)); /* aria, sabes que é s o meu "rande mor " */

                          return 0;
                          }

                          R Offline
                          R Offline
                          Rodrigo Lourenco
                          wrote on last edited by
                          #12

                          Thank you, for all, it was a great help. The problem was solved by:

                          #include #include #include #include #define false 1
                          #define true 0

                          char* my_strdelupper(char* s){

                            int i,j, len;
                            char aux\[100\];
                            char debuging;
                          
                            len = strlen(s);
                            j = 0;
                            for (i = 0; \*(s + i) != '\\0'; i++){
                                if (!isupper(\*(s+i))){
                                    debuging = \*(s + i);
                                    \*(aux + j) = debuging;
                                   j++;
                                }
                            }
                            \*(aux + j) = '\\0';
                          
                            strcpy(s, aux);
                            return s;
                          

                          }

                          int main()
                          {
                          char s3[]="Maria, TU sabes que TU éS o meu \"Grande Amor\"";
                          printf("%s\n",my_strdelupper(&s3[0])); /* aria, sabes que é s o meu "rande mor " */

                          return 0;
                          }

                          J CPalliniC 2 Replies Last reply
                          0
                          • R Rodrigo Lourenco

                            Thank you, for all, it was a great help. The problem was solved by:

                            #include #include #include #include #define false 1
                            #define true 0

                            char* my_strdelupper(char* s){

                              int i,j, len;
                              char aux\[100\];
                              char debuging;
                            
                              len = strlen(s);
                              j = 0;
                              for (i = 0; \*(s + i) != '\\0'; i++){
                                  if (!isupper(\*(s+i))){
                                      debuging = \*(s + i);
                                      \*(aux + j) = debuging;
                                     j++;
                                  }
                              }
                              \*(aux + j) = '\\0';
                            
                              strcpy(s, aux);
                              return s;
                            

                            }

                            int main()
                            {
                            char s3[]="Maria, TU sabes que TU éS o meu \"Grande Amor\"";
                            printf("%s\n",my_strdelupper(&s3[0])); /* aria, sabes que é s o meu "rande mor " */

                            return 0;
                            }

                            J Offline
                            J Offline
                            jschell
                            wrote on last edited by
                            #13

                            As a note - you define 'len' but you don't use it. Presumably the assignment does not say otherwise, using that would make your code simpler.

                            1 Reply Last reply
                            0
                            • R Rodrigo Lourenco

                              Thank you, for all, it was a great help. The problem was solved by:

                              #include #include #include #include #define false 1
                              #define true 0

                              char* my_strdelupper(char* s){

                                int i,j, len;
                                char aux\[100\];
                                char debuging;
                              
                                len = strlen(s);
                                j = 0;
                                for (i = 0; \*(s + i) != '\\0'; i++){
                                    if (!isupper(\*(s+i))){
                                        debuging = \*(s + i);
                                        \*(aux + j) = debuging;
                                       j++;
                                    }
                                }
                                \*(aux + j) = '\\0';
                              
                                strcpy(s, aux);
                                return s;
                              

                              }

                              int main()
                              {
                              char s3[]="Maria, TU sabes que TU éS o meu \"Grande Amor\"";
                              printf("%s\n",my_strdelupper(&s3[0])); /* aria, sabes que é s o meu "rande mor " */

                              return 0;
                              }

                              CPalliniC Offline
                              CPalliniC Offline
                              CPallini
                              wrote on last edited by
                              #14

                              Note you don't need extra storage, the function may change the string in place:

                              char * remove_upper( char * s)
                              {
                              char * p, *q;

                              for (p = q = s; *p != '\0'; ++p)
                              if ( ! isupper(*p) )
                              *q++ = *p;

                              *q = '\0';
                              return s;
                              }

                              In testa che avete, signor di Ceprano?

                              P J 2 Replies Last reply
                              0
                              • CPalliniC CPallini

                                Note you don't need extra storage, the function may change the string in place:

                                char * remove_upper( char * s)
                                {
                                char * p, *q;

                                for (p = q = s; *p != '\0'; ++p)
                                if ( ! isupper(*p) )
                                *q++ = *p;

                                *q = '\0';
                                return s;
                                }

                                P Offline
                                P Offline
                                Peter_in_2780
                                wrote on last edited by
                                #15

                                Taken from K&R 1st ed? Certainly has that feel> :laugh: ;P

                                Software rusts. Simon Stephenson, ca 1994. So does this signature. me, 2012

                                CPalliniC 1 Reply Last reply
                                0
                                • P Peter_in_2780

                                  Taken from K&R 1st ed? Certainly has that feel> :laugh: ;P

                                  Software rusts. Simon Stephenson, ca 1994. So does this signature. me, 2012

                                  CPalliniC Offline
                                  CPalliniC Offline
                                  CPallini
                                  wrote on last edited by
                                  #16

                                  It is the Wonderful C programming language, of course has such a feel. In any case, were Dennis and Brian the ones who plagiarized my programs. :-D

                                  In testa che avete, signor di Ceprano?

                                  1 Reply Last reply
                                  0
                                  • V Victor Nijegorodov

                                    Why not using the std::string with all its and other std methods? :zzz: :confused:

                                    M Offline
                                    M Offline
                                    Member_14494321
                                    wrote on last edited by
                                    #17

                                    As I have not clear idea about the std but yes this library used in most of the cases. [Fixed] Dell Printer Error 016 302 | Error Code 0x[^] helped me to get the solution.

                                    1 Reply Last reply
                                    0
                                    • CPalliniC CPallini

                                      Note you don't need extra storage, the function may change the string in place:

                                      char * remove_upper( char * s)
                                      {
                                      char * p, *q;

                                      for (p = q = s; *p != '\0'; ++p)
                                      if ( ! isupper(*p) )
                                      *q++ = *p;

                                      *q = '\0';
                                      return s;
                                      }

                                      J Offline
                                      J Offline
                                      John R Shaw
                                      wrote on last edited by
                                      #18

                                      I was begging to think no one here was thinking. Thanks

                                      INTP "Program testing can be used to show the presence of bugs, but never to show their absence." - Edsger Dijkstra "I have never been lost, but I will admit to being confused for several weeks. " - Daniel Boone

                                      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