我正在尝试从用字符串“mat”写的文件名中删除.txt扩展名:
sscanf(mat, "%s.txt", ime_datoteke);
如果mat="sm04567890.txt"
我需要ime_datoteke="sm04567890"
。
在示例中,我尝试使用sscanf
,但它不起作用(它将mat复制到ime_datoteke)。
我怎样才能在C中完成?
答案 0 :(得分:1)
您可以稍微修改sscanf
方法,以阅读不包含.
的字符串:
sscanf(mat, "%[^.].txt", ime_datoteke);
但是,最好是从字符串末尾查找.
字符,然后复制由它确定的子字符串。
char* dot = strrchr(mat, '.');
strncpy(ime_datoteke, mat, dot - mat);
答案 1 :(得分:1)
使用strrchr:
char* pch = strrchr(str,'.');
if(pch)
*pch = '\0';
答案 2 :(得分:1)
此示例使用strrchr()
查找字符串中的最后一个句点,然后仅复制该句点之前的字符串部分。
如果未找到句点,则复制整个字符串。
const char *fullstop;
if ((fullstop = strrchr(mat, '.')))
strncpy(ime_datoteke, mat, fullstop - mat);
else
strcpy(ime_datoteke, mat);
答案 3 :(得分:0)
使用标准C函数strstr
:
char a[] ="sm04567890.txt";
char *b = strstr(a, ".txt");
*b = '\0';
printf("%s\n", a);
将打印:
sm04567890