[英]how to pass array of pointer of pointers to a function?
我知道如何在main中修改指針數組,但是當我的函數需要對其進行修改時,我不知道該怎么做。 **之間的代碼是我在不使用函數的情況下如何在main中進行的操作。 我知道如何打印出指針的指針數組。 我的問題是,假設我要將這些行**移到function()中,我需要修改什么?
碼:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void function(char *array[], int size);
void function_print(char *array[], int size);
int main()
{
char *array[] = {0};
char word[20];
**scanf("%s", word);
int len = strlen(word) + 1;
array[size] = (char *)malloc(sizeof(len));
strlcpy(array[size], word, sizeof(array[size]));**
function(array, 0);
return 0;
}
void function(char *array[], int size)
{
}
void function_print(char *array[], int size)
{
for(int x = 0; x < size; x ++)
{
printf("%s", *array);
(array)++;
}
}
~
~
我進行了一些編輯,並意識到您的功能將執行相同的操作。 因此,繼續前進,如果您不知道它是如何工作的,請閱讀EDIT 。
此外,我認為您的main()中有問題。 首先,array [size] =(char *)malloc(sizeof(len)); 由於此處未定義大小,因此往往會報告錯誤。 其次,如果按大小表示數組中元素的數量,則array [size]會導致溢出。 第三,malloc的參數應為sizeof(char)* len,而不是sizeof(len),因為后者等於sizeof(int)。
將功能更改為
void function(char **, int);
並稱之為
function(array, 0);
編輯
我認為“修改”是指更改存儲在數組中的指針。 由於每個元素都是char*
,因此char**
將完成任務。
當您將array
作為參數傳遞時,實際上是在傳遞第一個元素的地址 。 然后在函數中以char** parray
接收它。 由於還傳遞了大小,因此可以將其用作char* parray[]
,並且每個元素的地址與main()
array
完全相同。 因此,您對parray
所做的任何修改都會更改array
。 那是你要的嗎?
在調用函數並傳遞char指針數組時,您沒有做錯任何事情。 這是正確的方法。 您的程序沒有為我編譯,因此做了一些小的更改。 有用。
#include<stdio.h>
#include<string.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
void function(char *array[], int size);
int main()
{
char *array[] = {0};
char word[20];
scanf("%s", word);
int len = strlen(word) + 1;
array[0] = (char *)malloc(sizeof(len)); //that how I do it in main without using a function.
strcpy(array[0], word);
function(array, 0);
return 0;
}
void function(char *array[], int size)
{
char * temp = new char[strlen(array[0])+1];
strcpy(temp, array[0]);
printf(temp, 's');
}
寫這個:
void function(char *array[], int size)
和這個:
void function(char **array, int size)
在這種情況下是相同的。
如果您定義一個這樣的函數,則不必像一樣聲明它,您可以像這樣聲明它: void function(char **, int );
聲明僅描述函數的返回類型和參數類型。現在,還有一些其他建議:
不要像這樣使用 scanf
:
scanf("%s", word);// you need to specify field width in case of strings otherwise it will overwrite buffer in case of large strings
, scanf("%s", word);// you need to specify field width in case of strings otherwise it will overwrite buffer in case of large strings
因此請執行以下操作:
scanf("%19s",word);
size
未在您的主體中定義,相反,我寧願這樣做:
size_t len = sizeof(word) + 1;// yes, try to use size_t when returning number of bytes
*array = (char*)malloc(sizeof len);// casting malloc is not recommended though.
strncpy(*array, word,len);
嘗試做:
void function(char *array, int size)();
而不是:
function(array,0);
因為數組本身是一個內存地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.