剛學 C 時並沒有注意到 scanf 回傳值。
scanf 讀取成功時會傳回轉換完成的參數數量,如果失敗則會傳回 EOF。讀取資料直到 EOF 可以寫成:
while( scanf(" %s", intput) != EOF ){
// Todo
}
軟體開發、伺服器和生活瑣事
剛學 C 時並沒有注意到 scanf 回傳值。
scanf 讀取成功時會傳回轉換完成的參數數量,如果失敗則會傳回 EOF。讀取資料直到 EOF 可以寫成:
while( scanf(" %s", intput) != EOF ){
// Todo
}
以前用 for 迴圈跑字串,都要寫好常一串:
char s[5]="123";
int index = 0;
while( s[index] != ' ' ){
// get s[index];
index++;
}
無意間看到有人這樣寫:
char s[5]="123";
int index;
for(index=0; s[index]; index++){
// get s[index];
}
原因是 會被當作 false,換做其他資料型別的陣列就沒辦法這樣寫。
一般寫 PHP 會將系統設定、資料庫連結等功能分開放在多個不同的檔案中。
index.php:
<?php
require('settings.php');
// something else
session_start();
?>
settings.php:
<?php
// some settings
?>
以上程式執行以後會噴錯誤訊息:
session_start(): Cannot send session cache limiter - headers already sent
原因是在 index.php 呼叫 session_start() 之前已經輸出資料,不過到底是哪裡有輸出資料?仔細看才會發現 settings.php 在「?>」後方還換了一行,換行是在 PHP closing tag 之外,所以就被當作一般資料送出。
當程式很龐大時,這種 bug 實在會讓人摔鍵盤、丟滑鼠、凹螢幕。
事實上 PHP 程式不加上結尾的「?>」也是可以執行的,直譯器到檔案結尾會自動當作該程式段落結束,所以程式可以改寫成這樣:
index.php
<?php
require('settings.php');
// something else
session_start();
settings.php
<?php
// some settings
在 ESXi host 上按 F2 登入,選 Troubleshooting Options,將 local / remote Tech Support 啟動。
設定完畢後重新啟動 Management Agent。