2013-07-12 141 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);