文字列「mat」で記述されたファイル名から .txt 拡張子を削除しようとしています。
sscanf(mat, "%s.txt", ime_datoteke);
mat="sm04567890.txt"
私がそれを望むならime_datoteke="sm04567890"
。例のように を使用してみましsscanf
たが、うまくいきません (mat を ime_datoteke にコピーします)。
Cでどうすればいいですか?
アプローチを少し変更して、 :sscanf
を含まない文字列を読み取ることができます。.
sscanf(mat, "%[^.].txt", ime_datoteke);
ただし、文字列の最後から文字を探し、.
それによって決定された部分文字列をコピーするのが最善です。
char* dot = strrchr(mat, '.');
strncpy(ime_datoteke, mat, dot - mat);
この例では、 を使用strrchr()
して文字列の最後のピリオドを検索し、そのピリオドの前にある文字列の部分のみをコピーします。
ピリオドが見つからない場合は、文字列全体がコピーされます。
const char *fullstop;
if ((fullstop = strrchr(mat, '.')))
strncpy(ime_datoteke, mat, fullstop - mat);
else
strcpy(ime_datoteke, mat);
strrchrを使用します。
char* pch = strrchr(str,'.');
if(pch)
*pch = '\0';
標準 C 関数の場合strstr
:
char a[] ="sm04567890.txt";
char *b = strstr(a, ".txt");
*b = '\0';
printf("%s\n", a);
印刷されます:
sm04567890