Hi there
I'm just starting an assignment for uni and it's raised a question for me.
I don't understand how to return a string from a function without having a memory leak.
char* trim(char* line) {
int start = 0;
int end = strlen(line) - 1;
/* find the start position of the string */
while(isspace(line[start]) != 0) {
start++;
}
//printf("start is %d\n", start);
/* find the position end of the string */
while(isspace(line[end]) != 0) {
end--;
}
//printf("end is %d\n", end);
/* calculate string length and add 1 for the sentinel */
int len = end - start + 2;
/* initialise char array to len and read in characters */
int i;
char* trimmed = calloc(sizeof(char), len);
for(i = 0; i < (len - 1); i++) {
trimmed[i] = line[start + i];
}
trimmed[len - 1] = '\0';
return trimmed;
}
as you can see I am returning a pointer to char which is an array. I found that if I tried to make the 'trimmed' array by something like:
char trimmed[len];
then the compiler would throw up a message saying that a constant was expected on this line. I assume this meant that for some reason you can't use variables as the array length when initialising an array, although something tells me that can't be right.
So instead I made my array by allocating some memory to a char pointer.
I understand that this function is probably waaaaay sub-optimal for what it is trying to do, but what I really want to know is:
Can you normally initialise an array using a variable to declare the length like:
char trimmed[len];
If I had an array that was of that type (char trimmed[]) would it have the same return type as a pointer to char (ie char*).
If I make my array by callocing some memory and allocating it to a char pointer, how do I free this memory. It seems to me that once I have returned this array, I can't access it to free it as it is a local variable.
Many thanks in advance
Joe