文字ポインタとしてファイル名「test.mf」があります。このファイルの拡張子を「test.pfb」に変更したい。私はこのための簡単なコードを書いていますが、それはいくつかのごみ文字を印刷する結果になります。オンラインCコンパイラで同じコードを実行するとガベージ値は発生しませんが、GCCを使用して実行するとガベージ値になります。同じこと(.mfファイルのファイル拡張子を.pfbに変更すること)をはるかに優れた、迅速な方法で達成できる場合は、提案してください。私はこれが初めてなので、ばかげた間違いは無視してください。
コード
char *Get_PFB_font_file_name(char *TTF_Font_name)
{
size_t alen = strlen(TTF_Font_name);
alen = alen+1;
char mystring[alen];
const char* extension = ".pfb";
char *PFB_File= malloc(alen+1);
strncpy(mystring, TTF_Font_name, alen-4);
strcat( mystring, extension );
strncpy(PFB_File, mystring, alen);
if(!PFB_File)
{
printf("error in get TTX conversion function");
exit(1);
}
return PFB_File;
}
int main ( void )
{
char *MF_Font_file_name = "test.mf";
char *PFB_Font_file_name;
PFB_Font_file_name = Get_PFB_font_file_name(MF_Font_file_name);
printf("PFB font file name is %s \n", PFB_Font_file_name); // garbage value here (test�.p)
return 0;
}
についてstrncpy
:
strncpy()関数は(strcpyと)似ていますが、最大nバイトのsrcがコピーされる点が異なります。警告:srcの最初のnバイトの中にnullバイトがない場合、destに配置された文字列はnullで終了しません。
strncpy(mystring, TTF_Font_name, alen-4);
strcat( mystring, extension );
上記の警告/制限が適用されるTTF_Font_name
よりも長いalen-4
ため、これには未定義の動作strcat
があり、のサイズをmystring
適切に計算できません。
これを修正する1つの方法:これを2行の間に挿入するだけです。
mystring[alen-4] = '\0';
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加