我想將下面的C代碼翻譯成C++。fscanf C++等效
FILE *fp = NULL;
fp = fopen("./filename", "r");
int i = 0;
fscanf(fp, "%d\n", &i);
uint16_t j = (uint16_t) i;
這是我想出了這一點:
ifstream file;
string filename = "./filename";
file.open(filename.c_str(), ios::in);
errno = 0;
if (file.fail()) {
int tmp = errno;
std::cout << file.c_str() << " not found: strerror(" << tmp << "): " << strerror(tmp));
}
int i = 0;
file >> i >> std::endl;
uint16_t j = (uint16_t) i;
我想知道的語法是否正確的或可改善,更重要的它是否是對各種輸入安全。
首先,我會說試試看。如果有錯誤,那麼就特別提問那些問題,而不是「對社區來說這是正確的」。針對這兩種程序嘗試不同的輸入,並查看哪些程序失敗,以及它們爲什麼不同。 – 2012-04-23 15:23:58
或者你可以保留原來的C代碼。 C++是C的超集。 – 2012-04-23 15:26:34
@RogerLipscombe:取決於C++版本。 C++ 03沒有C99'uint16_t',但並不是每個人都已經切換到C++ 11。 – 2012-04-23 15:30:13