0

文字列「mat」で記述されたファイル名から .txt 拡張子を削除しようとしています。

sscanf(mat, "%s.txt", ime_datoteke);

mat="sm04567890.txt"私がそれを望むならime_datoteke="sm04567890"。例のように を使用してみましsscanfたが、うまくいきません (mat を ime_datoteke にコピーします)。

Cでどうすればいいですか?

4

4 に答える 4

1

アプローチを少し変更して、 :sscanfを含まない文字列を読み取ることができます。.

sscanf(mat, "%[^.].txt", ime_datoteke);

ただし、文字列の最後から文字を探し、.それによって決定された部分文字列をコピーするのが最善です。

char* dot = strrchr(mat, '.');
strncpy(ime_datoteke, mat, dot - mat);
于 2012-06-11T19:37:38.430 に答える
1

この例では、 を使用strrchr()して文字列の最後のピリオドを検索し、そのピリオドの前にある文字列の部分のみをコピーします。

ピリオドが見つからない場合は、文字列全体がコピーされます。

const char *fullstop;

if ((fullstop = strrchr(mat, '.')))
    strncpy(ime_datoteke, mat, fullstop - mat);
else
    strcpy(ime_datoteke, mat);
于 2012-06-11T19:40:57.270 に答える
1

strrchrを使用します。

char* pch = strrchr(str,'.');

if(pch)
   *pch = '\0';
于 2012-06-11T19:39:15.213 に答える
0

標準 C 関数の場合strstr:

char a[] ="sm04567890.txt";
char *b = strstr(a, ".txt");
*b = '\0';
printf("%s\n", a);

印刷されます:

sm04567890

于 2012-06-11T19:41:14.167 に答える