利用gets函式 花式進行賦值操作

2021-08-25 14:46:08 字數 1113 閱讀 3894

今天在看別人**時,發現gets的新用法,記錄如下

給三個字串陣列,兩個一維陣列char a,char b,乙個二維字串陣列temp

要求輸入兩個字串,分別輸入到ab中,然後讓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:

lint1

line2

520

output:

lint1

line2

line1

line2

520

輸入輸出正常,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函式族有三...