[英]Changing a character array inside a function in C
在創建我在此處模擬的Linux模塊時,我遇到了一個問題。
#include <stdio.h>
#include <stdlib.h>
void changeBuff(unsigned char ** b)
{
*b[0] = 0x12;
*b[1] = 0x34;
}
int main(void) {
unsigned char * buf = (unsigned char *)malloc(sizeof(unsigned char) * 2);
buf[0] = 0x55;
buf[1] = 0xAA;
printf("%x\t%x\n", buf[0], buf[1]);
changeBuff(&buf);
printf("%x\t%x\n", buf[0], buf[1]);
return 0;
}
長話短說,我正在嘗試更改函數內部數組的值。 雖然第一個索引的值被更改,但是第二個索引卻沒有發生變化。 上面代碼的輸出是
55 aa
12 aa
在其他stackoverflow線程中也解決了一些類似的問題(例如,使用C?中的函數更改數組,使用C中的函數 傳遞和更改數組,使用C中的函數 更改數組 ),但由於某種原因,即使使用指向字符數組的指針也是如此在我的情況下不起作用(如上面ideone鏈接中的代碼輸出所示)。 我在這里做錯了什么?
[]
運算符比*
運算符的綁定更緊密,因此請更改
*b[0] = 0x12;
至
(*b)[0] = 0x12;
或者改變
void changeBuff(unsigned char ** b)
{
*b[0] = 0x12;
*b[1] = 0x34;
}
至
void changeBuff(unsigned char * b)
{
b[0] = 0x12;
b[1] = 0x34;
}
而不是這樣稱呼它
changeBuff(&buf);
這樣稱呼它
changeBuff(buf);
與您的問題無關:
void
指針強制轉換為void
指針。 sizeof (char)
根據定義等於1。 所以這條線
unsigned char * buf = (unsigned char *)malloc(sizeof(unsigned char) * 2);
等於這個
unsigned char * buf = malloc(2);
一個更強大的版本是
unsigned char * buf = malloc(2 * sizeof *buf);
這將在更改buf
指向的類型時繼續存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.