簡體   English   中英

C Memset輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM