如果我有一个char指针数组和另一个静态字符数组,如何将指针数组的每个元素分配给静态数组的每个元素?
(试图将问题分解为更小的问题。)
感谢。
array of pointers array of char
+----+ +----+
| | ----> | |
| * | | h |
+----+ +----+
| * | | i |
| | ----> | |
+----+ +----+
答案 0 :(得分:3)
我在这里即兴创作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
因为我使用了sizeof
,所以你在这里得到第4个指针,指向字符串的NULL终止字符。
答案 1 :(得分:2)
char chrArr[] = "asd";
char* ptrArr[strlen(chrArr)];
char* chrPtr = chrArr;
char** ptrPtr = ptrArr;
while (*chrPtr)
*ptrPtr++ = chrPtr++;
答案 2 :(得分:1)
Aditya重新提交了你的答案。我不确定你为什么要分配所有的指针。 “如果我有一个char指针数组”
char** arr;
“和另一个静态字符数组”
char str[]="Hi there";
“如何将指针数组的每个元素分配给静态数组的每个元素?”
len = strlen(str);
arr = (char **) malloc(sizeof(char *) * len); /*typecasting for C++ */
if ( arr != NULL )
{
int i=0;
for(i=0; i < len; i++)
arr[i]=&str[i];
} else {
// error handling
}
当然这些指针只有在静态str数组存在之前才有效(通常直到你退出语句块)。非常容易出错,但这正是您的要求。
答案 3 :(得分:0)
“如果我有一个char指针数组”
char ** arr;
“和另一个静态字符数组”
char str [] =“你好”
“如何将指针数组的每个元素分配给静态数组的每个元素?”
len = strlen(str);
arr = (char **)malloc(sizeof(char *) * len);/*typecasting for C++ */
if ( arr != NULL)
{
for(i=0; i < len; i++)
{
arr[i] = (char *)malloc(sizeof (char)); /* typecasting for C++ */
if ( arr[i] != NULL)
{
arr[i] = &str[i];
}
else
{
/*If you choose to return from here,
* free allocated memory upto now
*/
for(j=0;j<i;j++)
{
free(arr[j]);
}
free(arr);
return 1;
}
}
}
希望它有所帮助。
答案 4 :(得分:0)
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;
}