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 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