在C中返回一个char指针

我正在开发一种用C语言编写的文件共享程序.有一个函数可以读取数据文件并将数据存储到字符串中,并将此字符串返回给main函数,main函数发送回客户端.代码如下所示

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();
}

但是,此方法不起作用.没有任何显示,当然也没有发送任何内容.但我确实在函数ListFiles()中得到了正确的显示.我不知道发生了什么.我也使用strcpy(),它仍然无法正常工作.

遵循 George Skoptsov建议.但是如果你没有 strdup()功能,那么使用:

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;
}

然后:

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

/* do something... */

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

或者代替char文件[30];做一个dynamic memory allocation:char * file = malloc(30);然后你可以做回归f;并且它将正常工作,因为f now不是指向局部变量的指针.

相关文章
相关标签/搜索