将输入文件名(const*file*)存储到字符数组

将输入文件名(const*file*)存储到字符数组,c,C,因此,我尝试将文本文件(例如,file.txt)作为函数参数,并将文件名保存为字符数组。我在下面编写了这个简单的代码,希望FnameToChar(“test.txt”)将返回一个字符数组作为array[]={t',e',s',t','\0'}。我应该如何修复语法以使其正常工作 char FnameToChar(const char *fn) { char filename[20]; filename = fn; return filename; } 您的代码有几个问题:

因此,我尝试将文本文件(例如,
file.txt
)作为函数参数,并将文件名保存为字符数组。我在下面编写了这个简单的代码,希望
FnameToChar(“test.txt”)
将返回一个字符数组作为
array[]={t',e',s',t','\0'}
。我应该如何修复语法以使其正常工作

char FnameToChar(const char *fn)
{
    char filename[20];
    filename = fn;
    return filename;
}

您的代码有几个问题:

  • 不能从c中的函数返回数组。您可以做的是返回一个指针。请注意,为了实现目标,必须在堆上分配内存,不能返回局部变量的地址

  • 你的返回值全错了。您应该返回一个
    char*
    ,而不是
    char
    ,它是一个单个字符

  • 不能使用
    赋值运算符复制c字符串。您需要使用类似于
    strcpy
    的函数。在您的情况下,也许您应该使用
    strdup
    创建字符串的新副本,但请记住您必须
    释放它


  • 您的代码有几个问题:

  • 不能从c中的函数返回数组。您可以做的是返回一个指针。请注意,为了实现目标,必须在堆上分配内存,不能返回局部变量的地址

  • 你的返回值全错了。您应该返回一个
    char*
    ,而不是
    char
    ,它是一个单个字符

  • 不能使用
    赋值运算符复制c字符串。您需要使用类似于
    strcpy
    的函数。在您的情况下,也许您应该使用
    strdup
    创建字符串的新副本,但请记住您必须
    释放它

    • 返回类型应该是
      char*
      ,而不是
      char
    • 您应该使用来复制字符串
    • 从函数返回时,非静态局部变量将无效。您应该动态分配一个数组
    返回指向静态数组的指针是另一种选择,但请注意不要导致缓冲区溢出,并注意这不是线程安全的:

    #include <string.h> /* for strncpy() */
    
    char* FnameToChar(const char *fn)
    {
        static char filename[20];
        strncpy(filename, fn, sizeof(filename));
        filename[sizeof(filename) - 1] = '\0'; /* make sure to have terminating null-character */
        return filename;
    }
    
    #包括/*用于strncpy()*/
    字符*FnameToChar(常量字符*fn)
    {
    静态字符文件名[20];
    strncpy(文件名,fn,sizeof(文件名));
    filename[sizeof(filename)-1]='\0';/*请确保使用空字符*/
    返回文件名;
    }
    
    • 返回类型应该是
      char*
      ,而不是
      char
    • 您应该使用来复制字符串
    • 从函数返回时,非静态局部变量将无效。您应该动态分配一个数组
    返回指向静态数组的指针是另一种选择,但请注意不要导致缓冲区溢出,并注意这不是线程安全的:

    #include <string.h> /* for strncpy() */
    
    char* FnameToChar(const char *fn)
    {
        static char filename[20];
        strncpy(filename, fn, sizeof(filename));
        filename[sizeof(filename) - 1] = '\0'; /* make sure to have terminating null-character */
        return filename;
    }
    
    #包括/*用于strncpy()*/
    字符*FnameToChar(常量字符*fn)
    {
    静态字符文件名[20];
    strncpy(文件名,fn,sizeof(文件名));
    filename[sizeof(filename)-1]='\0';/*请确保使用空字符*/
    返回文件名;
    }
    
    您不需要空值检查fn吗?您不需要空值检查fn吗?您的输入已经是一个字符数组,因此不需要该函数。您的输入已经是一个字符数组,因此不需要该函数。
    #include <string.h> /* for strncpy() */
    
    char* FnameToChar(const char *fn)
    {
        static char filename[20];
        strncpy(filename, fn, sizeof(filename));
        filename[sizeof(filename) - 1] = '\0'; /* make sure to have terminating null-character */
        return filename;
    }