如何在C中使用NULL

C語言中使用空指針的簡要指南 許多編程語言都使用了「null」的概念。 Go 語言使用「nil」,JavaScript 使用「null」,Python 使用「None」等等。 而在C語言中,則使用「NULL」。 然而,C語言中的NULL與其他語言使用方式有所不同。在C語言中,NULL僅用於標識一個空指針。 當我們初始化一個指針時,有時候我們並不知道它要指向什麼。這時NULL就派上用場了: int *p_some_variable = NULL; NULL並不是默認可用的:你需要包含stdio.h標頭文件才能使用它(或者如果你更喜歡的話,可以使用stddef.h): #include <stdio.h> int main(void) { int *p_some_variable = NULL; } 否則,C編譯器會報錯: hello.c:3:26: error: use of undeclared identifier 'NULL' int *p_some_variable = NULL; ^ 1 error generated. 你可以通過將指針與NULL進行比較來檢查它是否為空指針: #include <stdio.h> int main(void) { int *p_some_variable = NULL; if (p_some_variable == NULL) { printf("equal"); } } 在實際應用中,NULL是一個等於0或 "\0"的常數。 這就是為什麼你可以使用以下方式將字符串設置為NULL: char *a_string = '\0';

如何在C中確定數組的長度

C語言並未提供一種內置的方法來獲取數組的大小,您需要進行一些額外的工作。 首先,我想提到最簡單的方法:將數組的長度保存在一個變量中。有時候,簡單的解決方案是最好的。 與其這樣定義數組: int prices[5] = { 1, 2, 3, 4, 5 }; 最好使用一個變量來表示數組的大小: const int SIZE = 5; int prices[SIZE] = { 1, 2, 3, 4, 5 }; 這樣,如果您需要使用循環遍歷該數組,您可以使用這個 SIZE 變量: for (int i = 0; i < SIZE; i++) { printf("%u\n", prices[i]); } 獲取數組長度的最簡單程序化方法是使用sizeof運算符。 首先,您需要確定數組的大小,然後將其除以一個元素的大小。這樣能夠正常工作,因為數組中的每個元素都具有相同的類型,並且大小相同。 舉個例子: int prices[5] = { 1, 2, 3, 4, 5 }; int size = sizeof prices / sizeof prices[0]; printf("%u", size); /* 5 */ 除了...

如何在C中檢查字符值

學習如何在C中檢查字符值 在C中工作時,我們可以使用ctype.h標準函式庫的一組函式來檢查char類型變量的值。 我們可以使用以下幾個有用的檢查: isalnum() 檢查字符是否是字母或數字 isalpha() 檢查字符是否是字母 iscntrl() 檢查字符是否是控制字符 isdigit() 檢查字符是否是數字 isgraph() 檢查字符是否是可打印的ASCII字符(但不包括空格) islower() 檢查字符是否是小寫字母 isprint() 檢查字符是否是可打印的ASCII字符 ispunct() 檢查字符是否是標點字符(可打印的字符,不包括空格和字母數字) isspace() 檢查字符是否是空白字符(請參閱後面的更多內容) isupper() 檢查字符是否是大寫字母 isxdigit() 檢查字符是否是十六進制數字(0-F) 我提到isspace()函式可以檢查字符是否是空白字符。什麼是空白字符? 水平制表符(HT),'\t',ASCII表的第9個字符 垂直制表符(VT),'\v',ASCII表的第11個字符 換頁(FF),'\f',ASCII表的第12個字符 歸位符(CR),'\r',ASCII表的第13個字符 空格,' ',ASCII表的第32個字符 換行,'\n'

如何在C語言中使用迴圈

C語言提供了三種迴圈執行的方式:for迴圈,while迴圈和do while迴圈。它們都可以用來迭代陣列,但有一些差異。讓我們詳細看看它們。 for迴圈 第一種,也是最常見的一種迴圈是for迴圈。 使用 for 關鍵字可以在開始時定義迴圈的規則,並提供重複執行的程式區塊。 像這樣: for (int i = 0; i <= 10; i++) { /* 重複執行的指令 */ } (int i = 0; i <= 10; i++) 區塊包含迴圈的三個部分: 初始條件 (int i = 0) 測試 (i <= 10) 增量 (i++) 我們首先定義一個迴圈變數,這個例子中命名為 i。在迴圈中,i 是常見的迴圈變數名稱,與巢狀迴圈(迴圈內部的迴圈)時使用的 j 一起。這只是一種約定俗成的寫法。 這個變數從值 0 開始初始化,並執行第一次迴圈。然後根據增量部分的設定進行遞增(在這個例子中是 i++,按 1 遞增),直到達到數字 10。 在迴圈的主要程式區塊中,我們可以存取變數 i 來得知迴圈的執行次數。這個程式應該輸出 0 1 2 3 4 5 5 6 7 8 9 10: for (int i = 0; i <= 10; i++) { /* 重複執行的指令 */ printf("%u ", i); } 迴圈也可以從一個大數字開始,結束於一個較小的數字,像這樣:...

如何在DigitalOcean上建立您的第一個VPS

一個由零開始完成DigitalOcean VPS建立的完整指南 在本文中,我想引導您完成在DigitalOcean上設置第一個Linux虛擬專用伺服器(VPS)的過程。 DigitalOcean是最著名的VPS服務之一。 DigitalOcean具有對於最著名的應用程式和作業系統的一鍵安裝過程,它提供了一個全球數據中心和CDN位置的環境。它也非常可靠,且以每月5美元起點價格非常方便。 我認為DigitalOcean是最實惠且易於使用的解決方案之一,我使用它來進行各種服務。 步驟1:建立DigitalOcean帳戶 你可以使用 這個推廣連結獲得一個100美元的信用,這個信用可以在接下來的60天內使用。 免責聲明:這是一個推廣連結。當您使用這個連結進行註冊時,您將獲得100美元的信用,而我將獲得25美元的DigitalOcean信用。 我之所以推薦DigitalOcean並不只是因為他們有推廣計劃,當然不是這樣。恰恰相反:由於我經常使用它,如果我可以減少我的帳單,我就會利用這個機會。 一旦您在網站上: 填寫註冊表格,您就可以快速上手運行。您也可以使用Google或GitHub進行註冊。 您需要確認您的電子郵件: 之後,您需要輸入資料結算信息,這將在您完成100美元免費信用時需要: 步驟2:建立專案 一旦您註冊成功,您現在能夠創建一個新的專案: 輸入一個名稱和一個對於這個專案的描述: 點擊“創建專案”後,該專案現在已被添加到您的專案列表中,並出現了專案儀表板: 這是您想對該專案進行任何操作的控制中心。 首先,有一個帶有開始使用Droplet文字的大藍色按鈕。 什麼是Droplet?DigitalOcean Droplet是一台虛擬機器,也就是VPS。也就是我們想創建的東西。DigitalOcean的一切都圍繞著Droplet展開。 從這個界面上,我們還可以初始化一個托管數據庫,創建一個空間(用於存儲文件)和創建一個負載均衡器來分配多個Droplet之間的流量。 但讓我們保持簡單。我們只是要創建一個Droplet。 創建Droplet 點擊專案儀表板中的開始使用Droplet按鈕。 這將向您顯示一個帶有許多選項的頁面: 讓我們從頂部開始。 第一個選擇是選擇映像。在這裡,我們可以選擇幾個Linux發行版(Ubuntu、Fedora、Debian和CentOS)和FreeBSD(另一個UNIX作業系統)。 對於每個選項,我們可以選擇特定的版本: 除了發行版,我們還有其他類別。其中Marketplace讓我們可以一鍵安裝預配置了應用程式(如WordPress、Ghost、LAMP伺服器或150多個應用程式中的任何一個)的伺服器。這是一種非常方便的快速啟動任何項目的方式。 快照、備份和自定義映像讓您可以從現有的伺服器創建新的伺服器。 現在您已經知道這裡可以做什麼了,讓我們從發行版面板中選擇Ubuntu LTS。 在選擇計劃中,您可以選擇標准計劃(這是我們將使用的計劃),或更高效的CPU優化或記憶體優化伺服器。這意味著伺服器將成本更高。 談到成本,現在我們有一個表格,您可以選擇伺服器的大小(和成本): 不要受騙:點擊箭頭向左以顯示更便宜的計劃: 一個每月5美元的計劃可以覆蓋很長一段時間,直到您需要升級。同時,請注意計費是按小時計算的,所以如果您使用一台伺服器10分鐘,仍然會計費1小時。 接下來,我們可以選擇添加塊儲存來進行持久性數據儲存(現在不需要),並選擇一個數據中心區域: 您應該選擇哪個數據中心區域? 選擇離您的訪問者最近的地區。我幾乎總是選擇紐約,因為它位於歐洲和美國其他地區之間。 我們有其他選項,您可以忽略它們,然後我們有身份驗證: 選擇密碼以保持事情簡單,但對於真正的伺服器,我建議使用SSH密鑰驗證(更複雜,但更安全)。 輸入您將用於root使用者(Linux系統管理員)的密碼。 然後填寫一個對你來說有意義的使用者名稱: 最後,點擊創建Droplet按鈕: DigitalOcean將開始Droplet的創建過程: 一旦完成,它將顯示公共伺服器IP地址: 點擊名字以顯示Droplet儀表板: 從這裡,您完全控制著一台位於世界某個數據中心的電腦。 這很酷,而且這只是一個開始。 在伺服器可以準備運行任何任務之前,您需要完成很多事情,其中第一個要做的事情應該是創建一個非root的使用者,關注伺服器的安全,並設置任何您想在上面執行的伺服器。

如何在GitHub上進行首次Pull Request

如何在GitHub上編輯項目並創建PR呢? 關於這個主題有很多教程,但許多教程過於複雜,它們假設你必須為項目做出代碼貢獻,所以還有一些git設置。 如果你只需要編輯一個文件,比如修正項目的README中的拼寫錯誤呢? 你不需要知道如何編程或如何使用Git來完成這個操作。但是,一旦你開始進行Pull Request,你就可以進行更多事情並與其他人協作項目!也許這會激勵你在以後貢獻代碼。 假設你已經有一個(免費)GitHub帳號。如果沒有,請訪問github.com生成一個。 讓我向你展示整個流程。 我找到了一篇可能有拼寫錯誤的文章,該文章存在於這個頁面:https://web.dev/prefers-color-scheme/ 我知道該網站是托管在GitHub上的,具體該文章位於這裡:https://github.com/GoogleChrome/web.dev/tree/master/src/site/content/en/blog/prefers-color-scheme 我直接在GitHub上打開index.md文件https://github.com/GoogleChrome/web.dev/blob/master/src/site/content/en/blog/prefers-color-scheme/index.md,然後按文件工具欄中的鉛筆圖標。將鼠標懸停在圖標上會顯示“Fork this project and edit the file”。 這將打開一個編輯器界面,顯示以下信息: 你正在編輯一個你沒有寫權限的項目中的文件。將提交對這個文件的更改,將它寫入你的fork flaviocopes/web.dev 的一個新分支中,然後你可以發送一個pull request。 我在文件中添加了那個句號,然後在底部的表單中解釋了我所做的更改: 我點擊了“Propose File Change”按鈕,然後顯示了一個比較視圖: 在這裡,我可以查看我所做的更改,確保一切都正常,最後我可以點擊“Create Pull Request”按鈕。目前這些更改已經發生在你fork的項目上,當你點擊鉛筆圖標時,GitHub會自動創建你的fork。 在這個視圖的頂部,你可以看到我正在將一個PR提交到GoogleChrome/web.dev項目,從我的fork flaviocopes/web.dev的分支patch-2到他們的master分支。 點擊“Create Pull Request”按鈕會顯示另一個表單,在這裡我可以為Pull Request撰寫詳細的描述。 Pull Requests可以包含多個不同的更改,理論上你可以在同一個PR中編輯許多文件,這就是為什麼你可以添加摘要。 這個倉庫有一個用於PR文本的模板,以幫助團隊管理它。我們的PR非常簡單,所以我移除了模板,只是將之前提交消息中的內容粘貼了過來。 右邊的提示看到了嗎?他們告訴我這個項目有一個CONTRIBUTING.md文件,其中解釋了如何參與貢獻和遵守的準則。非常酷。 看起來我們需要簽署一個CLA(貢獻者授權協議)來完成我們的PR。我過去已經簽署了Google的CLA,所以對我來說這一步很清楚,但你可能需要處理這個。大多數項目實際上不需要它。 我點擊“Create pull request”,PR現在已經提交! 現在由項目維護者來接受,你只需要等待一封郵件告訴你它是否被合併,或者其他人是否有評論。 […過了幾個小時…] 我收到了一封郵件,該PR被拒絕了,因為那個句號實際上是在正確的位置上!(我不知道) 但無論如何,這是我想要添加的一個事情:如果你提交的PR不被接受,不要生氣或沮喪。項目的維護者可能花了好幾個月或幾年的時間,他們對於項目的了解比你更多。 此外,特別是對於代碼而言,觀點可能非常不同,你認為很好的PR可能不被歡迎。 最好在進行實質性PR之前先詢問,看看項目是否真的需要這樣的改變。 但這是另一個話題。

如何在HTML中添加注釋

了解如何在HTML頁面中添加注釋 在HTML頁面中,注釋是一些不會被瀏覽器解釋的HTML片段。 注釋位於<!--和-->標籤之間: <!-- 這是一個注釋 --> 注釋也可以跨多行: <!-- 這是 一個注釋 --> 你可以在HTML中使用注釋來提醒自己,例如解釋某些HTML的存在。 你也可以使用它們來刪除你曾經寫過但現在不想顯示的HTML部分,例如用於測試目的。 在這兩種情況下,訪問網站的人看不到你在渲染頁面中的注釋文本,但如果他們嘗試查看頁面的源代碼,則可以看到注釋。 因此,不要在注釋中保留任何重要或不想讓用戶看到的內容。 此外,請記住,頁面的大小對於速度很重要,因此在生產環境中的HTML中不應該有大量的注釋。少量的注釋是可以接受的,我更多的是指幾百行被注釋的HTML。

如何在Hugo中获取当前文件名,而不包含 .md

以下是可以完成工作的模板片段: {{ trim .File.LogicalName ".md" }}

如何在Hugo中實現圖片的懶加載

當我在我的電子書網站The Valley of Code上推出新的主頁時,我並沒有考慮到我的託管費用以及為客戶加載大量圖片的影響。 由於每個頁面非常長(沒有導航,這就是它們作為書籍而不是文章的目的),一個頁面的大小甚至可能達到10MB。 因此,我決定通過使用懶加載來解決這個問題,也就是說,當用戶滾動到該圖片時,瀏覽器只加載該圖片。 這是一個權衡,但我相信99%的人打開一個頁面後甚至根本不會立即滾動到該圖片。 問題是…我無法控制標記!所有的內容都在Markdown中。 但是我發現Hugo允許我們覆蓋圖片的呈現方式。 在您的主題中創建文件layouts/_default/_markup/render-image.html,內容如下: <img src="{{ .Destination | safeURL }}" alt="{{ .Text }}" loading="lazy" /> 這將使生成的HTML具有loading="lazy"屬性,從而實現圖片的懶加載。

如何在Hugo中獲取當前的URL

在Hugo中,要獲取當前的URL可以使用以下代碼: {{ trim .Page.RelPermalink "/"}} 下面是代碼執行的結果: yoursite.com/ebooks -> "ebooks" yoursite.com/ebooks/php -> "ebooks/php"