[英]Passing Array as a function argument and setting elements values
因此,我認為該問題的解決方案非常簡單,但我必須缺少一些東西。 我要做的就是將數組傳遞給函數,然后在函數中設置數組元素值,然后在全局范圍內使用。
int setArray(char* myArray) {
char localArray[9] = "abcdefghi";
for (int i = 0; i < 10; i++){
myArray[i] = localArray[i];
printf("myArray: %c\n", myArray[i]);
}
return(0);
};
int main(int argc, char* argv[])
{
char* globalArray = NULL;
setArray(globalArray);
printf("globalArray: %s\n", globalArray);
return(0);
};
上面的代碼崩潰了。 有一次,我可以在函數中設置globalArray並打印出它的值,但是當我在main()中打印出值時,它為null。
我認為問題在於無法正確設置指針並傳遞它,但是我不確定
任何幫助將不勝感激。 謝謝。
它崩潰是因為您沒有為globalArray
分配內存。
只需添加如下內容:
globalArray = malloc(10);
在setArray()
調用之前。
另外,如前所述,您的復制功能不正確,因為您在復制時忘記了空終止符。
指針globalArray
沒有指向有效的內存位置。 您需要分配內存,並使用malloc
, calloc
等將該地址存儲在globalArray
。
您可以在main()
或setArray()
函數中分配內存,因為動態內存分配使用堆,即使setArray
退出后,所有函數也可以訪問該堆。
因此正確的代碼可能是:
char* globalArray = malloc(10 * sizeof(char));
if(!globalArray)
{
printf("Memory could not be allocated!\n");
exit(1);
}
setArray(globalArray);
...
您還沒有在函數setArray()
中將\\0
字節復制到myArray
中
在for
循環之后for
您需要myArray[i] = '\\0';
你也有char localArray[9] = "abcdefghi";
在您的代碼中。
這里的localArray
不是有效的c字符串,因為它不包含結尾的'\\0'
字符。 盡管它暫時不會出現任何問題,但是如果您碰巧將localArray
打印/更改為字符串,那么它將導致無效的內存訪問( SegFault
)
所以避免使用
`char localArray[] = "abcdefghi";`
代替
`char localArray[9] = "abcdefghi";`
您需要為globalArray
指向分配內存,或者需要將其聲明為數組而不是指針:
char *globalArray = malloc( SOME_SIZE );
if ( globalArray )
{
setArray( globalArray );
...
}
free( globalArray );
要么
char globalArray[SOME_SIZE];
setArray( globalArray );
其中SOME_SIZE
大到足以至少將setArray
函數中localArray
的內容以及尾隨字符串終止符(0值字節)保存起來。
編輯
代碼崩潰的原因是您為myArray
參數傳遞了一個NULL
值,這是一個無效的指針值。 嘗試取消引用無效的指針值(在這種情況下,通過使用[]
下標運算符)會導致未定義的行為 ; 在您的情況下,它將導致您的代碼崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.