2016-04-03 13 views
1

Dosya adını giriş olarak alacak bir dizi işlev yazmayı deniyorum (ör. Main.c) ve strsep() işlevini kullanarak dosya uzantısını döndür. Programı çalıştırdığımda, strsep işlevi çağrıldığında bir veriyolu hatası alıyorum. çalıştırıldığında bu program bir otobüs hataya neden niçinVeriyolu Hatası strsep() kullanma

int main(int argc, char *argv[]) 
{ 
     char *filename = "test.c"; 
     format(filename); 

     return 0; 
} 

emin oldum:

static char *get_extn(char **filename) 
{ 
     char *delim = "."; 
     strsep(filename, delim); 

     return *filename; 
} 

void format(char *filename) 
{ 
     char *extn = malloc(256 * sizeof(char)); 

     strncpy(extn, get_extn(&filename), 256); 
     printf("extn: %s\n", extn); 
} 

Bu programın ana işlevi basitçe bir dosya adı içeren bir karakter * ile biçim() çağırır: İşte kod . Sağladığınız herhangi bir yardım için şimdiden teşekkür ederiz.

Düzenleme: dize hazır hafıza yazılabilir olması garanti edilmez

+0

'Bu programın ana işlevi, bir dosya adı içeren bir char * ile formatı() çağırır. ': Biz umursamıyor; Kodu istiyoruz. Btw, 'strsep()' kötü ve tehlikeli voodoo. Bunun yerine strtok() 'yi kullanmalısınız. – 3442

+0

Dosya adı bir dizgi değişmeziyse, büyük olasılıkla buna yazamazsınız. Muhtemelen otobüs hatasının sebebi. – PSkocik

+0

@KemyLand 'main() kodu eklendi –

cevap

1

eklendi ana işlevi kodu.

char filename[] = "test.c"; 

yerine yazılabilir karakter dizisini yaratmak için yapın.

Sistemimde, bu bellek salt okunur olarak korunur ve bu korumayı bozmaya çalışır.

da

, get_ext sadece olabilir:

return strsep(filename, "."); 

ve sizeof(char) 1 olarak tanımlanır (1 bayt - byte olup 8 bit büyük olduğu takdirde (nadir)).

İlgili konular