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