Skip to content

Commit a89c712

Browse files
authored
Avoid dump core for empty string replacement
strrep and strtokk deals with null string replacement test_strrep includes some examples of this feature
1 parent bcce06e commit a89c712

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

string_replace/Source/strrep.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ char * strtokk(char * string, const char * strf) {
3131
static char * ptr;
3232
static char * ptr2;
3333

34+
if (!*strf) return string;
3435
if (string) ptr = string;
3536
else {
3637
if (!ptr2) return ptr2;
@@ -39,7 +40,7 @@ char * strtokk(char * string, const char * strf) {
3940

4041
if (ptr) {
4142
ptr2 = strstr(ptr, strf);
42-
if (ptr2) memset(ptr2, 0, (size_t)strlen(strf));
43+
if (ptr2) memset(ptr2, 0, strlen(strf));
4344
}
4445
return ptr;
4546
}
@@ -59,6 +60,7 @@ char * strrep(const char * cadena, const char * strf, const char * strr) {
5960

6061
string = (char *)malloc(strlen(cadena));
6162
sprintf(string, "%s", cadena);
63+
if (!*strf) return string;
6264
ptr = strtokk(string, strf);
6365
strrep = malloc(strlen(ptr));
6466
memset(strrep, 0, strlen(ptr));

string_replace/Source/test_strrep.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,21 @@ void caso2(void) {
4848
newCadena = strrep(cadena, "temer", "hacer");
4949
printf("Sust :%s:\n", newCadena);
5050
free(newCadena);
51+
52+
printf("Cadena:%s:\n", cadena);
53+
newCadena = strrep(cadena, "temer", "");
54+
printf("Sust :%s:\n", newCadena);
55+
free(newCadena);
56+
57+
printf("Cadena:%s:\n", cadena);
58+
newCadena = strrep(cadena, "", "hacer");
59+
printf("Sust :%s:\n", newCadena);
60+
free(newCadena);
61+
62+
printf("Cadena:%s:\n", cadena);
63+
newCadena = strrep(cadena, " ", "");
64+
printf("Sust :%s:\n", newCadena);
65+
free(newCadena);
5166
}
5267

5368
void main (void) {

0 commit comments

Comments
 (0)