C 中的函式遇到一些麻煩,該函式基本上是在名稱引數的長度 擴展長度的幫助下創建和分配一個臨時陣列。
int my_func(char *name)
{
char *extension = ".db";
size_t tmp_size = strlen(name) strlen(extension);
char tmp_name[tmp_size];
return 0;
}
然而,這似乎不適用于 MSVC,但在 Clang 或 GCC 上運行良好。知道為什么我會收到這些錯誤:
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'tmp_name': unknown size
當我在 macOS 上的 Clang 中使用除錯器時,我看到它分配并作業正常。為什么不用于 MSVC?
uj5u.com熱心網友回復:
tmp_name是一個變長陣列,MSVC 不支持這樣的陣列。
如果您希望它在 MSVC 下作業,您需要動態分配空間。
此外,您的陣列是一個短元素,因為它沒有空間用于組合字串的終止空位元組。
uj5u.com熱心網友回復:
由于 tmp_size 是一個變數而不是一個固定值,因此您必須使用malloc動態分配記憶體,您也可以在使用free完成后釋放記憶體。
注意:您必須包含 stdlib 頭檔案才能訪問 malloc 和 free 函式
#include <stdlib.h>
#include <string.h>
int my_func(char *name)
{
char *extension = ".db";
size_t tmp_size = strlen(name) strlen(extension);
char *tmp_name;
tmp_name = malloc(sizeof(*tmp_name) * tmp_size 1 );
return 0;
}
使用完陣列后釋放記憶體*
free(tmp_name);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/532221.html
標籤:C
