I am making a program that concatenates two strings given by user. Everything is fine, but I don’t know why the program shows that the sizeof of the final result is 8-bit long. Doesn’t matter how long the strings are, it always shows 8. I guess, that it is the size of char, but I would like to know why it acts this way. This is the code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* concatenate(char *fir, char *sec)
{
int firLen = strlen(fir);
int secLen = strlen(sec);
int len = firLen + secLen + 1;
int i = 0,c=0;
int *wsk = &i;
char *result = (char *)malloc(len*sizeof(char));
while (fir[i]!='\0')
{
result[i]=fir[i];
(*wsk)++;
}
while (sec[c]!='\0')
{
result[i]=sec[c];
(*wsk)++;
c++;
}
result[len-1] = '\0';
return result;
}
int main(int argc, char **argv)
{
char *first, *second, *output;
int size1, size2;
printf("How long will your first string be: ");
scanf("%d", &size1);
first = (char *) malloc ((1+size1)*sizeof(char));
if (!first)
{
puts("\nError. Can't allocate memory!");
abort();
}
printf("How long will your second string be: ");
scanf("%d", &size2);
second = (char *) malloc ((size2+1)*sizeof(char));
if (!second)
{
puts("\nError. Can't allocate memory!");
abort();
}
printf("\nPlease, type in the first string: ");
scanf("%s",first);
printf("\nPlease, type in the second string: ");
scanf("%s",second);
output = (char *)malloc((size1+size2+1)*sizeof(char));
output = concatenate(first, second);
printf("\nConcatenation of the strings: %s", output);
printf("\n%d", sizeof(output));
free(first);
free(second);
free(output);
getchar();
return 0;
}
Don’t use
sizeofto determine string length, use thestrlenfunction, as you’re doing in other parts of your program.Use
sizeofto determine the size of data types, likechar, astruct, an array, etc.You’ve mentioned that you want to use
sizeofto check if everything is fine with memory allocation, but you can’t usesizeofthis way on a buffer of memory allocated withmalloc: you can only rely on the return value ofmalloc– which you aren’t checking – to know if your allocation was successful.You can use
sizeofto determine the size of an array:But this only works for arrays, and not buffers allocated using
malloc.Also this line creates a memory leak because you overwrite the pointer in the next line: