从C中的字符串中删除.txt

Lan*_*e_P 2 c

我想显示没有.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终止符的工作原理.

有什么建议?

gsa*_*ras 5

这个:

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所说