2016-03-26 12 views
2

Ich möchte die Namen der Dateien ohne ihre TXT-Erweiterung anzeigen. Ich habe bereits die Datei + Erweiterung von dir-> d_name gespeichert.Entfernen Sie. Txt aus Zeichenfolge in C

Es machte Sinn in meinem Kopf ihm die folgende Art und Weise zu tun:

char filename[size]; //assume this already contains name followed by.txt 
filename[size-4] = '\0'; 

Ich habe dies versucht, aber ich immer noch den Namen mit seiner Verlängerung bekommen werde. Vielleicht verstehe ich nicht ganz, wie der Null-Terminator funktioniert.

Irgendwelche Vorschläge?

+3

Dateiname [len (Dateiname) - 4] = '\ 0'; –

+0

Bitte schreiben Sie eine [SSCCE] (http://sscce.org/). – orlp

+1

Funktioniert nur, wenn 'size' gleich' strlen (filename) 'ist. Wenn 'size' 200 ist und der Dateiname' hello.txt' ist, dann denke ich, dass Sie das Problem sehen können. Ich würde vorschlagen, 'strstr' zu verwenden, um' .txt' zu finden. – user3386109

Antwort

5

Dies:

filename[size-4] = '\0'; 

wird nicht funktionieren, da Größe nicht ist (notwendigerweise) die Länge der Saite.

Versuchen:

filename[strlen(filename) - 4] = '\0'; 

Minimal Beispiel:

#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; 
} 

Ausgang:

[email protected]:~$ ./a.out 
test.txt 
test 

PS - Sie können prüfen wollen, ob .txt wirklich existiert .


Oder *, von strstr() verwenden, können Sie dies tun, und prüfen Sie, ob .txt tatsächlich existiert:

#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; 
} 

* als @ user3386109 sagte

+0

Die 'strstr' ist keine großartige Lösung. Was ist, wenn Ihr Dateiname "Dateiname.txt.tar.gz" oder "Ich liebe .txt-Dateien" lautet? – indiv

+1

@ user3386109 danke! Ja, das wird funktionieren. :) indiv gute Sache dann schlug ich zwei angegangen vor.:) (Ernsthaft jetzt, ja natürlich, ich gebe hier nur die Basis. Darüber hinaus hat OP eine Annahme dazu gemacht.) – gsamaras

0

tun Versuch

Dies sollte den Inhalt von Dateiname in noExt_string ohne die letzten 4 Zeichen kopieren.

0

Wenn Sie nur den Dateinamen ohne die TXT-Erweiterung drucken möchten, können Sie dies tun, ohne die Zeichenfolge zu ändern.

write(1, filename, strlen(filename) - 4); 
Verwandte Themen