Thursday, 22 June 2017

string - my own strcat function using C errors



I'm basically coding my very own string functions in C.




I've been trying to do the strcat function using pointers and cannot seem to understand whether I should be allocating memory using malloc or leaving it up to the heap.



char *my_strcat(const char *s1, const char *s2)
{


const unsigned char *p1 = (const unsigned char *)s1;
const unsigned char *p2 = (const unsigned char *)s2;


unsigned char *string;
//string = malloc(strlen(s1) + strlen(s2) + 1);
while (*p1 != '\0')
{
*string = *p1;
string++;
p1++;

if(*p1 == '\0')
{

while(*p2 != '\0')
{
*string = *p2;
string++;
p2++;
}
}
}
return (char *)string;
}



Any tips on more efficiently performing this task or things I'm doing wrong would be great!



Cheers



EDIT



OK so I got a working solution but just wondering after I use malloc where should I free() it?




char *my_strcat(const char *s1, const char *s2)
{


const unsigned char *p1 = (const unsigned char *)s1;
const unsigned char *p2 = (const unsigned char *)s2;

char *string = malloc(sizeof(char *));
char *res = string;


while (*p1 != '\0')
{
*string = *p1;
string++;
p1++;
}
while (*p2 != '\0')
{
*string = *p2;
string++;

p2++;
}
*string = '\0';

return (char *)res;
}

Answer



First, I assume that the allocation is commented out by mistake.





  • You need to save the pointer that you allocate, and return it. Otherwise, you're returning a pointer string, which points at the end of the concatenation result

  • You are not terminating the resultant string; you need to add *string = '\0'

  • You should move the second loop to the outside of the first loop, and drop the if condition around it: if the first loop has terminated, you know that *p1 points to \0






char *string = malloc(strlen(s1) + strlen(s2) + 1);
char *res = string;

for (; *p1 ; *string++ = *p1++);
for (; *p2 ; *string++ = *p2++);
*string = '\0';
return res;

No comments:

Post a Comment

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...