今天在看別人**時,發現gets的新用法,記錄如下
給三個字串陣列,兩個一維陣列char a,char b,乙個二維字串陣列temp。
要求輸入兩個字串,分別輸入到a和b中,然後讓temp[0]=a,temp[1]=b
一行操作:
#include
char a[10], b[10], *temp = ;
int main(void)
是不是感到很神奇,竟然在全域性範圍內進行了賦值操作,而且,gets函式直接寫在了陣列的宣告部分,這是什麼鬼?
我們先測試一下這**行不行:
#include
using
namespace
std;
char a[10], b[10], *temp = ;
int main(void)
input:輸入輸出正常,520也能正常讀入,可見,在全域性範圍內的讀入操作是先進行的,然後才是主函式的賦值操作。lint1
line2
520
output:
lint1
line2
line1
line2
520
為什麼gets函式能寫在陣列裡,原來,gets函式的返回值是char*,也就是字串的首位址,所以gets函式在從鍵盤中獲取字串後,賦值到ab中,然後返回ab字串的首位址,又賦值到*temp中。
純屬技巧,實際專案中請謹慎使用,賦值操作寫到主函式,**邏輯性將大大變差,和goto差不多。
賦值語句寫到陣列初始化內,**可讀性將大大變差。
預設建構函式 建構函式 複製建構函式和賦值操作符
這幾個概念比較容易混淆,總結一下。預設建構函式是沒有引數 和類同名的建構函式。當乙個類沒有任何建構函式時,編譯器將會合成乙個預設建構函式。那麼編譯器合成的預設建構函式是做什麼用的呢?是初始化類的成員變數嗎?事實上不是。編譯器合成的預設建構函式只是滿足編譯器的需要,而不是按照程式設計師想的去做。更詳細...
利用iconv函式族進行編碼轉換
在linux上進行編碼轉換時,既可以利用iconv函式族程式設計實現,也可以利用iconv命令來實現,只不過後者是針對檔案的,即將指定檔案從一種編碼轉換為另一種編碼。iconv函式族的標頭檔案是iconv.h,使用前需包含之。include iconv函式族有三個函式,原型如下 1 iconv t ...
利用iconv函式族進行編碼轉換
一 利用iconv函式族進行編碼轉換 在linux上進行編碼轉換時,既可以利用iconv函式族程式設計實現,也可以利用iconv命令來實現,只不過後者是針對檔案的,即將指定檔案從一種編碼轉換為另一種編碼。iconv函式族的標頭檔案是iconv.h,使用前需包含之。include iconv函式族有三...