簡體   English   中英

將int格式存儲為char * [C]

[英]Store an int in a char* [C]

int main()
{
   int n = 56;
   char buf[10]; //want char* buf instead
   sprintf(buf, "%i", n);
   printf("%s\n", buf);

   return 0;
}

這段代碼有效,我的問題是,如果我想要相同的行為,而buf是char *,該怎么辦?

寫作時的主要區別

char* buf;

它是未初始化的,並且沒有分配內存,因此您必須保重:

char* buf = malloc(10 * sizeof(char));
// ... more code here
free(buf); // don't forget this or you'll get a memory leak

這稱為動態內存分配 (相對於靜態分配),它允許您進行一些不錯的操作,例如在運行時使用realloc或在malloc調用中使用變量來更改分配的內存量 還要注意,如果內存量太大,內存分配可能會失敗,在這種情況下,返回的指針將為NULL

從技術上講,不需要上面的sizeof(char) ,因為1個char始終為1個字節,但是大多數其他數據類型更大,並且乘法很重要malloc(100)分配100個字節, malloc(100 * sizeof(int))分配100 int所需的內存量,在32位系統上通常為400字節,但是會有所不同。

int amount = calculate_my_memory_needs_function();
int* buf = malloc(amount * sizeof(int));
if (buf == NULL) {
  // oops!
}
// ...
if (more_memory_needed_suddenly) {
   amount *= 2; // we just double it
   buf = realloc(buf, amount * sizeof(int));
   if (!buf) { // Another way to check for NULL
     // oops again!
   }
}
// ...
free(buf);

另一個有用的函數是calloc ,它具有兩個參數(第一個:要分配的元素數,第二個:元素的大小(以字節為單位))並將內存初始化為0。

我認為calloc(如果沒有calloc,則為malloc)是您所追求的。

buf是在堆棧上靜態分配的數組。 為了使其成為char *類型,您需要動態分配內存。 我想你想要的是這樣的:

int main()
{
   int n = 56;
   char * buf = NULL;
   buf = malloc(10 * sizeof(char));
   sprintf(buf, "%i", n);
   printf("%s\n", buf);

   // don't forget to free the allocated memory
   free(buf);

   return 0;
}

編輯:正如“ Thomas Padron-McCarthy”在評論中指出的那樣,您不應該轉換malloc()的返回值。 您可以在此處找到更多信息。 您也可以將sizeof(char)完全刪除,因為它將始終為1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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