我在最後一行得到一個「int格式,不同類型arg(arg 4)」錯誤。我應該只投射到int還是有更好的方法來處理這個?Cast off_t到int
struct stat info;
if (stat(file_path, &info) == -1 || errno == ENOENT)
return -1;
if (stat(file_path, &info) != -1)
{
char buf[LINELEN];
snprintf(buf,LINELEN,"File Size: %d",info.st_size);
關於'printf'(這讓我真的很難過)的壞處恰恰就是格式字符串的問題。想象你的代碼根據某種配置typedefs爲'uint32_t'或'uint64_t'的類型。你永遠不能只是printf這些變量。但是,絕大多數工作沒有問題的解決方案是將參數轉換爲它們可以承擔的最大大小。以你的情況爲例:'printf(「%lu」,(unsigned int)info.st_size);'無論大小如何,都能正確打印。唯一的問題是,如果論點比你的演員大。你會失去數據,但仍然避免UB。 – Shahbaz