簡體   English   中英

在初始化時為char指針分配一個const

[英]Assign a const to char pointer on initialization

我有一個無法更改的功能,例如:

void f(char *var) {
  var = (char*) malloc(size*sizeof(char)); // I dont know the size, its a example
  // .. others operation with var
}

那么使用f函數初始化變量的最佳方法是什么:

char *myvar = "";
f(myvar);
// others operation;
free(myvar);

我的問題是正確的,將一個const作為""分配給一個char指針作為myvar嗎? 如果沒有,我該怎么辦?

函數f()注定了。 它對var影響無法超出其范圍。

應該更改它,以便:

(i)收到預分配的緩沖區:

void f(char *var) {
  // just uses var contents
}

(ii)它收到一個指向緩沖區的指針,該緩沖區可以存儲新分配的區域:

void f(char **var) {
  *var = (char*) malloc(size*sizeof(char));
  // .. others operation with var
}

要么

(iii)返回新分配的緩沖區(在這種情況下,該參數無用):

char* f(char *var) { 
  var = (char*) malloc(size*sizeof(char)); // I dont know the size, its a example
  // .. others operation with var
  return var;
}

這三個選項將為函數f提供可用的語義。 但是正如您所說的,您無法更改它,那么它就注定了。

什么?

如果該函數看起來像這樣,並且您無法更改它,那么您將無法做您想做的事情。

該函數無法在調用者的作用域內更改變量的值,這是不可能的,除非將參數設為char **var

如果您像f("");這樣稱呼它f(""); 它將使用某個靜態字符串的地址在某處進行調用,但是該地址將立即被malloc()的調用所覆蓋。

同樣,該調用不應將其返回值轉換為C。

為了理解代碼的目的, myvar = ""初始化似乎毫無意義。

在函數f ,您正在將局部變量var設置為某個值。 這將對調用該函數時傳遞給該函數的變量的值沒有影響。 將其更改為以下任一選項:


void f(char** var,int size)
{
    *var = malloc(size);
    ...
}

void SomeOtherFunc()
{
    char* myvar;
    ...
    f(&myvar,size);
    ...
    free(myvar);
    ...
}

char* f(int size)
{
    char* var = malloc(size);
    ...
    return var;
}

void SomeOtherFunc()
{
    char* myvar;
    ...
    myvar = f(size);
    ...
    free(myvar);
    ...
}

暫無
暫無

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

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