Problem using strings
-
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 0char* 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;
}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.
-
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 0char* 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;
}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;
}
-
Why not using the std::string with all its and other std methods? :zzz: :confused:
I'm working with C
-
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.
You are correct, that was one mistake, but it should be *(s + i) != '\0' because I am searching for the end of line.
-
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;
}
The stupid thing is that I can't use malloc, so I made a char array with fixed size to overcame that problem.
-
If I were to hazard a guess, I'd say it has to do with
aux
being destroyed (i.e., going out of scope) oncemy_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
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.
-
You have:
char *s3 = "..."
. Although s3 is declared aschar *
the type of the string isconst char *
. Usechar s3[] = "..."
instead.It worked thanks
-
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 0char* 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;
}Thank you, for all, it was a great help. The problem was solved by:
#include #include #include #include #define false 1
#define true 0char* 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;
} -
Thank you, for all, it was a great help. The problem was solved by:
#include #include #include #include #define false 1
#define true 0char* 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;
} -
Thank you, for all, it was a great help. The problem was solved by:
#include #include #include #include #define false 1
#define true 0char* 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;
} -
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;
}Taken from K&R 1st ed? Certainly has that feel> :laugh: ;P
Software rusts. Simon Stephenson, ca 1994. So does this signature. me, 2012
-
Taken from K&R 1st ed? Certainly has that feel> :laugh: ;P
Software rusts. Simon Stephenson, ca 1994. So does this signature. me, 2012
-
Why not using the std::string with all its and other std methods? :zzz: :confused:
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.
-
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;
}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