我在C程序中追查了一個問題,致電strtok()
(其簽名爲char *strtok(char *str, const char *delim)
)。在試圖用一個非常簡單的玩具程序重新創建問題時,我碰到了一堵牆 - 我每次嘗試運行代碼時都會傳遞所有正確的參數類型併發生總線錯誤。爲什麼使用正確的參數類型調用此strtok()失敗?
這裏的程序:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
char* tok;
char* str = "www.example.com";
const char* split = ".";
tok = strtok(str, split);
while(tok != NULL) {
printf("%s\n", tok);
tok = strtok(NULL, split);
}
}
奇怪的是,我發現,宣佈str
爲數組(char str[] = "www.example.com"
),並傳遞一個參考str
初始的strtok調用(tok = strtok(&str, split)
)似乎正常工作。
我真的不擔心這裏的功能 - 使用數組的解決方案的作品。我很好奇爲什麼使用指向char
的指針的原始實現失敗並拋出一個總線錯誤。
http://stackoverflow.com/questions/2589949/c-string-literals-where-do-they-go – fukanchik