我知道如何修改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)++;
}
}
~
~
答案 0 :(得分:1)
我做了一些编辑,并意识到你的功能也会这样做。所以继续,如果你不知道它是如何工作的,请阅读编辑。
此外,我认为你的主()中出现了问题。首先,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[]
,并且每个元素的地址与array
中的main()
完全相同。因此,使用parray
进行的任何修改都会更改array
。这就是你想要的吗?
答案 1 :(得分: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');
}
答案 2 :(得分: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);
答案 3 :(得分:-2)
尝试做:
void function(char *array, int size)();
而不是:
function(array,0);
因为数组本身是一个记忆地址。