1

定義:

  • CHAR_BACKSLASHは '\\' または 0x5C として定義されます

変数:

  • workingDirは C 文字列です
  • myFilePathは C 文字列です

    int len = strlen(workingDir);
    char lastChar = workingDir[len - 1];
    

以下では、myFilePathはworkingDir +バックスラッシュ+ リテラル"myfile.txt"から形成されます。

三項引数では、バックスラッシュがまだない場合はバックスラッシュを入れようとしています。

    snprintf(myFilePath,
             sizeof(myFilePath),
             "%s%s%s",
             workingDir,
             (lastChar == CHAR_BACKSLASH) ? "" : "\\",
             "myfile.txt");

可能であれば、このようなものに変更したいと思いますが、空の単一引用符が必要であり、それが許可されているかどうかわからないため、方法がわかりません。

    snprintf(myFilePath,
             sizeof(myFilePath),
             "%s%c%s",
             workingDir,
             (lastChar == CHAR_BACKSLASH) ? '' : CHAR_BACKSLASH,
             "myfile.txt");
4

1 に答える 1

2

なぜこれではないのですか?'' が %c の有効なケースであるかどうかを心配する必要はありません。また、snprintf では、処理する変数が 1 つ少なくなります。

snprintf(myFilePath,
         sizeof(myFilePath),
         (lastChar == '\\') ? "%s%s" : "%s\\%s"
         workingDir,
         "myfile.txt");
于 2013-04-07T21:19:36.427 に答える