strncpyを使用して文字列をコピーすると、出力にガベージ値が発生します

アンマーウルハッサン

文字ポインタとしてファイル名「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;
}
Jean-Francois Fabre

について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]

編集
0

コメントを追加

0

関連記事

分類Dev

strncpy()を使用してMFCで文字列をコピーすると、データが切り捨てられます

分類Dev

文字列値をawkに出力すると、エラーが発生します

分類Dev

(React Native)AsyncStorage値を設定していますが、取得するとガベージが発生します

分類Dev

ポインタを使用して配列の要素を出力しようとすると、ガベージ値が出力されます

分類Dev

Cを使用して構造をfifoにコピーしようとすると問題が発生します

分類Dev

cの文字列リテラルでchar配列を初期化すると、ガベージコレクションが発生しますか?

分類Dev

strncpyを使用した後に残る文字列をコピーする方法

分類Dev

構造体を別の構造体に割り当てると、ガベージが発生します

分類Dev

Object.keys(javascript)を使用して配列を文字列にマッピングするときにエラーが発生しました

分類Dev

データベースに空の文字列として格納されているint値、新しい値を古い値に設定しようとすると、「文字列をintに変換できません」という問題が発生します

分類Dev

Windowsバッチを使用して長い文字列をクリップボードにコピーすると、「コマンドの構文が正しくありません」というエラーが発生します

分類Dev

オブジェクトを使用してExcelにコピーアンドペーストするとエラーが発生します

分類Dev

Prism.DryIoc.FormsでLazy <>を使用すると、「コンテナはガベージコレクションされます」という例外が発生します

分類Dev

データフレームの新しい列に値を割り当てると、「データフレームからのスライスのコピーに値を設定しようとしています」というエラーが発生します。

分類Dev

スコープ内に存在していても、文字列でcreateElementを使用すると、未定義のエラーが発生します

分類Dev

文字列内の整数を出力するときにエラーが発生しました

分類Dev

Pythonを使用してガベージUnicode文字列を特定する

分類Dev

JSON文字列から値を抽出すると、エラーメッセージT-SQLが発生します

分類Dev

文字列を画像としてエンコードすると圧縮が発生します

分類Dev

文字列値を含むように配列を設定すると、エラーが発生します

分類Dev

文字列のベクトル配列を初期化するときにエラーが発生しました

分類Dev

Python:mysqlに文字列としてデータを追加すると奇妙なエラーが発生します

分類Dev

char * []からすべての文字列をコピーしようとしていますが、セグメンテーション違反が発生します

分類Dev

Pythonでopencvを使用して画像をガウスぼかししているときにエラーが発生します。以前はコードが正常に機能していて、突然エラーが発生しました

分類Dev

「push()」を使用して文字列をJSON配列に追加するとエラーが発生する

分類Dev

node.jsでrequest-promiseを使用して外部APIデータをコンソールに出力するときにエラーが発生しました

分類Dev

openxlsxパッケージRでmergeCells()を使用すると、出力にエラーが発生します

分類Dev

デバッガーに2つの整数を追加すると、予期しない出力が発生します

分類Dev

Pythonを使用してMySQLデータベースに挿入すると、ProgrammingErrorエラーが発生します

Related 関連記事

  1. 1

    strncpy()を使用してMFCで文字列をコピーすると、データが切り捨てられます

  2. 2

    文字列値をawkに出力すると、エラーが発生します

  3. 3

    (React Native)AsyncStorage値を設定していますが、取得するとガベージが発生します

  4. 4

    ポインタを使用して配列の要素を出力しようとすると、ガベージ値が出力されます

  5. 5

    Cを使用して構造をfifoにコピーしようとすると問題が発生します

  6. 6

    cの文字列リテラルでchar配列を初期化すると、ガベージコレクションが発生しますか?

  7. 7

    strncpyを使用した後に残る文字列をコピーする方法

  8. 8

    構造体を別の構造体に割り当てると、ガベージが発生します

  9. 9

    Object.keys(javascript)を使用して配列を文字列にマッピングするときにエラーが発生しました

  10. 10

    データベースに空の文字列として格納されているint値、新しい値を古い値に設定しようとすると、「文字列をintに変換できません」という問題が発生します

  11. 11

    Windowsバッチを使用して長い文字列をクリップボードにコピーすると、「コマンドの構文が正しくありません」というエラーが発生します

  12. 12

    オブジェクトを使用してExcelにコピーアンドペーストするとエラーが発生します

  13. 13

    Prism.DryIoc.FormsでLazy <>を使用すると、「コンテナはガベージコレクションされます」という例外が発生します

  14. 14

    データフレームの新しい列に値を割り当てると、「データフレームからのスライスのコピーに値を設定しようとしています」というエラーが発生します。

  15. 15

    スコープ内に存在していても、文字列でcreateElementを使用すると、未定義のエラーが発生します

  16. 16

    文字列内の整数を出力するときにエラーが発生しました

  17. 17

    Pythonを使用してガベージUnicode文字列を特定する

  18. 18

    JSON文字列から値を抽出すると、エラーメッセージT-SQLが発生します

  19. 19

    文字列を画像としてエンコードすると圧縮が発生します

  20. 20

    文字列値を含むように配列を設定すると、エラーが発生します

  21. 21

    文字列のベクトル配列を初期化するときにエラーが発生しました

  22. 22

    Python:mysqlに文字列としてデータを追加すると奇妙なエラーが発生します

  23. 23

    char * []からすべての文字列をコピーしようとしていますが、セグメンテーション違反が発生します

  24. 24

    Pythonでopencvを使用して画像をガウスぼかししているときにエラーが発生します。以前はコードが正常に機能していて、突然エラーが発生しました

  25. 25

    「push()」を使用して文字列をJSON配列に追加するとエラーが発生する

  26. 26

    node.jsでrequest-promiseを使用して外部APIデータをコンソールに出力するときにエラーが発生しました

  27. 27

    openxlsxパッケージRでmergeCells()を使用すると、出力にエラーが発生します

  28. 28

    デバッガーに2つの整数を追加すると、予期しない出力が発生します

  29. 29

    Pythonを使用してMySQLデータベースに挿入すると、ProgrammingErrorエラーが発生します

ホットタグ

アーカイブ