簡體   English   中英

如何將指針數組傳遞給函數?

[英]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 stringsscanf("%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.

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