簡體   English   中英

使用 strsep() 的總線錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM