我試圖刪除文件名.txt擴展名被寫入字符串「墊」:分割字符串令牌
sscanf(mat, "%s.txt", ime_datoteke);
如果mat="sm04567890.txt"
我想那ime_datoteke="sm04567890"
。 正如在例子中我嘗試使用sscanf
,但它不工作(它複製到ime_datoteke)。
我該如何在C中做到這一點?
我試圖刪除文件名.txt擴展名被寫入字符串「墊」:分割字符串令牌
sscanf(mat, "%s.txt", ime_datoteke);
如果mat="sm04567890.txt"
我想那ime_datoteke="sm04567890"
。 正如在例子中我嘗試使用sscanf
,但它不工作(它複製到ime_datoteke)。
我該如何在C中做到這一點?
您可以修改您的sscanf
方法稍微讀一個字符串,不包括.
:
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()
查找字符串中的最後一期,然後將複製preceeds那段字符串的唯一部分。
如果未找到句點,則會複製整個字符串。
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