0

我知道如何修改 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)++;
   }
}


~
~
4

4 回答 4

1

我做了一些编辑并意识到你的功能也会这样做。所以继续,如果你不知道它是如何工作的,请阅读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);

编辑

我认为“修改它”是指更改存储在数组中的指针。由于每个元素都是 a char*,因此 achar**将完成这项工作。

当您array作为参数传递时,实际上您传递的是第一个元素的地址。然后在函数中你用char** parray. 既然你也传递了size,你可以把它当成a char* parray[],每个元素的地址都和arrayin完全一样main()。因此,您所做的任何修改parray都会改变array. 那是你要的吗?

于 2013-07-12T01:51:51.113 回答
0

写这个:

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("%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);
于 2013-07-12T03:46:53.273 回答
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');

    }
于 2013-07-12T02:11:41.513 回答
-2

尝试做:

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

而不是:

function(array,0);

因为数组本身就是一个内存地址。

于 2013-07-12T02:05:32.637 回答