我想显示没有.txt扩展名的文件名.我已经从dir-> d_name存储了文件+扩展名.
我的脑子里有以下方式做到这一点:
char filename[size]; //assume this already contains name followed by.txt
filename[size-4] = '\0';
Run Code Online (Sandbox Code Playgroud)
我试过这个,但我仍然得到它的扩展名.也许我不完全理解null终止符的工作原理.
有什么建议?
这个:
filename[size-4] = '\0';
Run Code Online (Sandbox Code Playgroud)
因为大小不是(必然)字符串的长度,所以不起作用.
尝试:
filename[strlen(filename) - 4] = '\0';
Run Code Online (Sandbox Code Playgroud)
最小的例子:
#include <stdio.h>
#include <string.h>
#define SIZE 20
int main(void) {
char filename[SIZE] = "test.txt";
printf("%s\n", filename);
// -4 for .txt
filename[strlen(filename) - 4] = '\0';
printf("%s\n", filename);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
gsamaras@gsamaras:~$ ./a.out
test.txt
test
Run Code Online (Sandbox Code Playgroud)
PS - 你可能想检查.txt是否真的存在.
或者*,通过使用strstr(),您可以执行此操作并检查.txt是否实际存在:
#include <stdio.h>
#include <string.h>
int main (void) {
char str[] = "test.txt";
char *pch;
pch = strstr(str, ".txt");
if(pch) // if's body won't execute if .txt is absent
*pch = '\0';
puts(str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
*正如@ user3386109所说