2013-07-12 172 views
0

我知道如何修改main中的指針數組,但不知道當我的函數需要修改它時如何去做。 **之間的代碼是我如何在沒有使用函數的情況下執行它。我知道如何打印出指針指針數組。我的問題是,假設我想將這些行移動到函數()中,我需要修改什麼?如何將指針指針數組傳遞給函數?

代碼:

#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)++; 
    } 
} 


~ 
~ 
+0

你在做什麼沒有意義* *之前,你的函數調用。它看起來並不像你甚至需要一組指針來做你可能想做的事情。而且,你使用'sizeof()'這兩個地方看起來有問題,可能沒有做你想要的。通過澄清你打算做的事情,你可能會得到更好的答案。 – antak

回答

1

我做了一些修改,並實現你的功能也將這樣做。所以繼續,如果你不知道它是如何工作的,請閱讀編輯

另外我覺得你的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[],並且每個元素的地址與arraymain()完全一樣。因此,您對parray所做的任何修改都將更改爲array。那是你要的嗎?

+3

void function(char * array [],int size);'和'void function(char **,int);'之間沒有區別。 – aschepler

+1

是不是這個'功能'幾乎和他所擁有的一樣? – antak

+0

你的答案只讓我打印我的指針數組,如果我需要初始化我的指針指針數組該怎麼辦? – user1701840

-2

嘗試做:

void function(char *array, int size)(); 

,而不是和:

function(array,0); 

因爲陣列本身它是一個memroy地址。

0

您在調用函數和傳遞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'); 

    } 
+0

這不是C <<在那裏。 – tchrist

+0

哦!這很愚蠢。只要看看通過這個問題的數組的部分。 – Messiah

+0

編輯tchrist評論後的輸出語句... – Messiah

0

寫這篇:

void function(char *array[], int size)

這:

void function(char **array, int size)

在這種情況下相同。

如果你像這樣定義一個函數,那麼它沒有必要宣佈它像一樣的,你可以聲明它想: void function(char **, int);

聲明只是說明了返回類型和參數類型function.Now的,其他一些建議:

不要使用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("%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);