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

    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