簡體   English   中英

在c中的snprintf中使用const char數組

[英]use const char array in snprintf in c

我是C語言的新手。我擁有這種類型的代碼,當我嘗試執行該代碼時,出現了以下警告消息:“傳遞'snprintf'的參數1會從指針目標類型中丟棄'const'限定符”,並且沒有任何反應。

我做錯了什么? 謝謝

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  int i;
  const char *msg[3] = {"Hello", "Good Morning", "Hello World"};
  const char *strings[];


  for(i=0; i<3; i++)
  snprintf(strings[i], 20, "%s %d", msg[i], i);

  for(i=0; i<3; i++)
  printf("strings[%d]: %s\n", i, strings[i]);

  return 0;
}

snprintf(strings[i], 20, "%s %d", msg[i], i);

試圖寫入strings[i] 由於已將其聲明為常量,因此編譯器只是拒絕這樣做,因為它違反了合同。

但是在這里,它甚至更加嚴重: strings[i]沒有為字符串甚至指針(!)分配任何內存,因此刪除const限定符將在運行程序時導致未定義的行為。

您需要為每個要打印的字符串分配空間,像這樣

char *strings[3];
for (i = 0; i < 3 ; ++i) {
    size_t length = snprintf(NULL, 0, "%s %d", msg[i], i);
    strings[i] = malloc(length + 1);
    if (string[i] != NULL) {
        snprintf(strings[i], length, "%s %d", msg[i], i);
    }
}

for (i = 0; i < 3 ; ++i) {
    if (string[i] != NULL) {
        printf("string[%d]: %s\n", i, strings[i]);
    }
}

在第一部分中,我們在堆棧上分配3個Poitner。 然后,對於每個字符串,我們首先計算長度,然后將snprintf()放入成功分配的內存中。

暫無
暫無

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

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