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

    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