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稍微修改您的方法以读取不包含 a 的字符串.

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

但是,最好.从字符串末尾查找字符,然后复制由它确定的子字符串。

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

使用strrchr

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

if(pch)
   *pch = '\0';
于 2012-06-11T19:39:15.213 回答
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 回答
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 回答