[英]Bus Error Using strsep()
我正在嘗試編寫一系列將文件名作為輸入(例如 main.c)並使用 strsep() 返回文件擴展名的函數。 當我運行程序時,每當調用 strsep 函數時,我都會收到總線錯誤。 這是代碼:
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);
}
該程序的主要功能只是使用包含文件名的 char* 調用 format():
int main(int argc, char *argv[])
{
char *filename = "test.c";
format(filename);
return 0;
}
我不確定為什么這個程序在執行時會導致總線錯誤。 預先感謝您提供的任何幫助。
編輯:添加了主要功能代碼
不能保證字符串文字的內存是可寫的。
做
char filename[] = "test.c";
來創建一個可寫的字符數組。
在我的系統上,此內存被保護為只讀,並且試圖違反此保護會生成段錯誤。
此外, get_ext 可以簡單地為:
return strsep(filename, ".");
並且sizeof(char)
被定義為 1(即 1 個字節——即使該字節不是 8 位大(罕見))。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.