在C中使用strcpy函数,不知道长度

时间:2013-03-29 08:55:14

标签: c string strcpy

我试着编写一个简单的函数来获取名称并在添加扩展名后返回它。 例如,如果我有一个指向“abcd”的char指针,该函数应该返回“abcd.as”

我尝试编写这个函数来获取char指针并在添加扩展后返回指向新char的指针。但有人知道为什么不工作?

char* AddFileExtension(char* FileName)
{
    char* FixFileName=NULL;
    char* Extension = ".as";
    strcpy(FixFileName, FileName);
    strcat(FixFileName, Extension);
    return FixFileName;
}

3 个答案:

答案 0 :(得分:1)

您必须为FixFileName分配内存:

char* Extension = ".as";
char* FixFileName = malloc(strlen(FileName) + strlen(Extension) + 1);

完成后,不要忘记free()记忆。出于显而易见的原因,这必须在函数之外完成。

答案 1 :(得分:1)

你必须为FixFileName分配内存,分配内存的大小应该是它的长度 FileName + sizeof(".as")

注意: sizeof将计算".sa"字符串的空字符,因此无需为字符串FixFileName的空字符串添加1

char* AddFileExtension(char* FileName)
{
#define EXTENSION_AS ".as"    
    char* FixFileName= malloc(strlen(FileName) + sizeof(EXTENSION_AS));

    sprintf(FixFileName, "%s%s", FileName, EXTENSION_AS);
    return FixFileName;
}

不要忘记在使用free()

的程序中无用时释放已分配的内存

答案 2 :(得分:0)

char* AddFileExtension(char* FileName)
{
    char* FixFileName=NULL;
    char* Extension = ".as";
    FixFileName=(char *) malloc(strlen(FileName)+strlen(Extension)+1);
    strcpy(FixFileName, FileName);
    strcat(FixFileName, Extension);
    return FixFileName;
}

试试上面的代码。一旦完成,你必须释放记忆