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