1

拡張子を追加した後に名前を取得して返す単純な関数を作成しようとしています。たとえば、「abcd」への char ポインターがある場合、関数は「abcd.as」を返す必要があります。

拡張機能を追加した後、char ポインターを取得し、新しい char へのポインターを返すこの関数を作成しようとしました。しかし、機能していません誰かが理由を知っていますか?

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

3 に答える 3

1

次のメモリを割り当てる必要がありますFixFileName

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

free()やり終わったら思い出を忘れずに。明らかな理由から、これは関数の外で行う必要があります。

于 2013-03-29T08:57:10.253 に答える
1

メモリをFixFileName割り当てる必要があり、割り当てメモリのサイズは FileName+の長さでなければなりませんsizeof(".as")

注:は文字列sizeofのヌル文字をカウントする".sa"ため、文字列のヌル文字に 1 を追加する必要はありませんFixFileName

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

于 2013-03-29T09:01:59.140 に答える
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;
}

上記のコードを試してください。完了したら、メモリを解放する必要があります

于 2013-03-29T09:08:13.243 に答える