Returning a char pointer in C

c, c-strings, pointers

Solution

Follow `George Skoptsov` recommendations. But If you don't have the `strdup()` function,then use this:

char* strdup(const char* org)
{
    if(org == NULL) return NULL;

    char* newstr = malloc(strlen(org)+1);
    char* p;

    if(newstr == NULL) return NULL;

    p = newstr;

    while(*org) *p++ = *org++; /* copy the string. */
    return newstr;
}

And then:

#include <string.h> /* strlen() call */
#include <stdlib.h> /* NULL, malloc() and free() call */

/* do something... */

char* ListFiles() {
        /* .... */ 
         return strdup(f);
}

Or instead of `char file[30];` do a `dynamic memory allocation`: `char* file = malloc(30);` then you can do `return f;` and it will work fine because `f` now is not a pointer to a local variable.

Problem

I am working on some kind of file sharing program which is written in C. There is a function that can read a data file and store the data into a string and return this string to main function and the main function send back to client. Codes are shown below ``` char* ListFiles(){ FILE *fp; char file[30]; char *f; if((fp=fopen("list","r"))==NULL) { ... } while (!feof(fp)) { fgets(file,50,fp); } fclose(fp); f=file; printf("%s",f); //get display!!! return f; } int main(){ char *files; ... ... files=ListFiles(); printf("%s",files); //nothing display!! sent(); } ``` However, this method doesn't work. There is nothing display and of course nothing is sent. But I do get the correct display in function ListFiles(). I don't know what happen. I also use strcpy() and it still fail to work.

Original source

Related problems