我想显示没有.txt扩展名的文件名。我已经从dir-> d_name。
中存储了文件+扩展名在我的脑海中以下列方式做到这一点是有道理的:
char filename[size]; //assume this already contains name followed by.txt
filename[size-4] = '\0';
我试过这个,但我仍然得到它的扩展名。也许我并不完全理解null终止符的工作原理。
有什么建议吗?
答案 0 :(得分:5)
此:
filename[size-4] = '\0';
不起作用,因为大小不一定是(必然)字符串的长度。
尝试:
filename[strlen(filename) - 4] = '\0';
最小例子:
#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;
}
输出:
gsamaras@gsamaras:~$ ./a.out
test.txt
test
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;
}
* as @ user3386109说
答案 1 :(得分:0)
尝试做
strncopy(noExt_string, filename, strlen(filename) - 4)
这应该将filename的内容复制到noExt_string而不包含最后4个字符。
答案 2 :(得分:0)
如果您只想打印没有.txt扩展名的文件名,那么您可以在不更改字符串的情况下执行此操作。
write(1, filename, strlen(filename) - 4);