Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将指针数组分配给数组_C_Arrays_Pointers - Fatal编程技术网

C 将指针数组分配给数组

C 将指针数组分配给数组,c,arrays,pointers,C,Arrays,Pointers,如果我有一个字符指针数组和另一个静态字符数组,如何将指针数组的每个元素分配给静态数组的每个元素 (试图将问题分解为更小的问题。) 谢谢 array of pointers array of char +----+ +----+ | | ---->

如果我有一个字符指针数组和另一个静态字符数组,如何将指针数组的每个元素分配给静态数组的每个元素

(试图将问题分解为更小的问题。)

谢谢

   array of pointers                            array of char
    +----+                                           +----+                        
    |    |       ---->                               |    |
    | *  |                                           |  h |
    +----+                                           +----+
    | *  |                                           | i  |
    |    |         ---->                             |    |
    +----+                                           +----+
“如果我有一个字符指针数组”

字符**arr

“和另一个静态字符数组”

char str[]=“你好”


“如何将指针数组的每个元素分配给静态数组的每个元素?”

len=strlen(str);
arr=(char**)malloc(sizeof(char*)*len)/*C++的类型转换
如果(arr!=NULL)
{
对于(i=0;i
字符**arr

“和另一个静态字符数组”

char str[]=“你好”


“如何将指针数组的每个元素分配给静态数组的每个元素?”

len=strlen(str);
ARR=(char **)Maloc(siZOF(char))*Lead;/*类型C++
如果(arr!=NULL)
{
对于(i=0;i(j=0;jAditya已经提交了你的答案。我不知道你为什么要分配所有的指针。
“如果我有一个字符指针数组”

“和另一个静态字符数组”


“如何将指针数组的每个元素分配给静态数组的每个元素?”

len=strlen(str);
ARR=(char **)Maloc(siZOF(char))*Lead;/*类型C++
如果(arr!=NULL)
{
int i=0;
对于(i=0;i

当然,这些指针只有在静态str数组存在之前(通常在您退出语句块之前)才有效。非常容易出错,但这正是您的请求。

Aditya重新提交了您的答案。我不确定您为什么要分配所有指针。
char **getPointers(char *initArr) {
char **arr;
int len, i;

if(initArr == NULL) return NULL;

/* + 1 for the null terminator */
len = strlen(initArr) + 1;

arr = (char **) malloc(sizeof(char *) * len);

/* since initArr is an array, we know the characters are contiguous in memory,
    so let's trust pointer arithmetic instead of dereferencing references we 
    create */
for(i = 0; i < len; i++) arr[i] = initArr + i;

return initArr;
}
“如果我有一个字符指针数组”

“和另一个静态字符数组”


“如何将指针数组的每个元素分配给静态数组的每个元素?”

len=strlen(str);
ARR=(char **)Maloc(siZOF(char))*Lead;/*类型C++
如果(arr!=NULL)
{
int i=0;
对于(i=0;i
当然,这些指针只有在静态str数组存在之前(通常在您退出语句块之前)才有效。非常容易出错,但这正是您的请求。

char**getPointers(char*initArr){
char **getPointers(char *initArr) {
char **arr;
int len, i;

if(initArr == NULL) return NULL;

/* + 1 for the null terminator */
len = strlen(initArr) + 1;

arr = (char **) malloc(sizeof(char *) * len);

/* since initArr is an array, we know the characters are contiguous in memory,
    so let's trust pointer arithmetic instead of dereferencing references we 
    create */
for(i = 0; i < len; i++) arr[i] = initArr + i;

return initArr;
}
字符**arr; 内伦,我; if(initArr==NULL)返回NULL; /*+1表示空终止符*/ len=strlen(initArr)+1; arr=(char**)malloc(sizeof(char*)*len); /*由于initArr是一个数组,我们知道字符在内存中是连续的, 因此,让我们信任指针算法,而不是去引用我们需要的引用 创造*/ 对于(i=0;i
char**getPointers(char*initArr){
字符**arr;
内伦,我;
if(initArr==NULL)返回NULL;
/*+1表示空终止符*/
len=strlen(initArr)+1;
arr=(char**)malloc(sizeof(char*)*len);
/*由于initArr是一个数组,我们知道字符在内存中是连续的,
因此,让我们信任指针算法,而不是去引用我们需要的引用
创造*/
对于(i=0;i
我在这里即兴创作托米的答案。
其他人都太长了,无法回答这样的问题

char  chrArr[] = "asd";
char* ptrArr[sizeof(chrArr)];
int i;

// A simple assignment loop over 'i' pointers and chars
for (i=0; i< sizeof(chrArr); i++)
    ptrArr[i] = &chrArr[i];
    ---------   ----------
//  pointer =   address of character
char chrArr[]=“asd”;
char*ptrArr[sizeof(chrArr)];
int i;
//“i”指针和字符上的简单赋值循环
对于(i=0;i

因为我使用了
sizeof
这里有第四个指针,指向字符串的空终止字符。

我在这里临时修改了Tomi的答案。
其他人都太长了,无法回答这样的问题

char  chrArr[] = "asd";
char* ptrArr[sizeof(chrArr)];
int i;

// A simple assignment loop over 'i' pointers and chars
for (i=0; i< sizeof(chrArr); i++)
    ptrArr[i] = &chrArr[i];
    ---------   ----------
//  pointer =   address of character
char chrArr[]=“asd”;
char*ptrArr[sizeof(chrArr)];
int i;
//“i”指针和字符上的简单赋值循环
对于(i=0;i

由于我使用了
sizeof
这里有第四个指针,指向字符串的空终止字符。

您想将字符*[]复制到字符*[][]?根据语法不确定,请查看我漂亮的ASCI art=)您想做作业吗?您想将字符*[]复制到字符*[][]?不确定基于语法,请查看我的漂亮ASCI art=)你是在做作业吗?这太长了,释放内存的方式完全错误。你从堆中取出了一些东西,这样就得到了随机垃圾,然后你又试图释放这些垃圾。我同意,太长了。你能解释为什么释放内存是完全错误的吗。mallocing=请求借用字节。内存管理器给出您可以从堆中提取字节。这些字节可能以前使用过,因此它们具有随机值(为了参数)。在迭代过程中,您将提取4个字节的部分(所有部分都是随机的),然后尝试释放这些部分(请记住,空间甚至还没有分配)。相反,您应该只释放(arr);“arr=(char**)malloc(sizeof(char*)*len);“…这不是在分配内存吗。我只在一个内部malloc失败时释放内存。因此,如果malloc在I=3时失败,那么我释放了以前分配的0,1,2。这太长了,它释放了我
char **getPointers(char *initArr) {
char **arr;
int len, i;

if(initArr == NULL) return NULL;

/* + 1 for the null terminator */
len = strlen(initArr) + 1;

arr = (char **) malloc(sizeof(char *) * len);

/* since initArr is an array, we know the characters are contiguous in memory,
    so let's trust pointer arithmetic instead of dereferencing references we 
    create */
for(i = 0; i < len; i++) arr[i] = initArr + i;

return initArr;
}
char  chrArr[] = "asd";
char* ptrArr[strlen(chrArr)];

char*  chrPtr = chrArr;
char** ptrPtr = ptrArr;

while (*chrPtr)
    *ptrPtr++ = chrPtr++;
char  chrArr[] = "asd";
char* ptrArr[sizeof(chrArr)];
int i;

// A simple assignment loop over 'i' pointers and chars
for (i=0; i< sizeof(chrArr); i++)
    ptrArr[i] = &chrArr[i];
    ---------   ----------
//  pointer =   address of character