[英]C Memset output
#include <stdio.h>
#include <string.h>
int main() {
char* p = new char[10];
memset(p,0,10);
printf("%c",*p);
}
我想memset
將每個從p
開始的字節設置為0
。 我一點都沒看到打印出來的東西,感到有些驚訝。 memset
到底發生了什么?
memset
確實將所有字節設置為0; 因此,當取消引用p
,則得到一個char
具有值0(NUL字節),並且在大多數系統,打印這樣的char
不產生可見的輸出。 如果要打印字節的數值,請使用printf("%d", *p);
。
ANS: 0(int數據)被類型轉換為等效的char(ASCII),然后復制到所有10個內存數組中。 巧合的是,與char等效的0(int)是空字符''\\ 0'。 因此,屏幕上什么也沒有顯示。 從邏輯上講,我們可以說在屏幕上打印了null。
{ie; (char)0 is equivalent to '\0' (null character)}
說明:
memset(p,0,10);
觀察第二個參數0,它是一個整數(2個字節),但是memset()必須在p的每個字節數組中設置0數據。 如何在1個字節的存儲空間上復制2個字節的integet? 這是不可能的。
因此,memset()方法首先將int數據類型轉換為char(1個字節),然后將char(1個字節)寫入該內存陣列的每個字節。
注意:memset()不會在字符串末尾放置任何空字符。 因此,我們必須明確地做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.