C中字符串数组指针的问题


char*** get_func(int size, char** arr) {
int i, num;
char*** ans = (char***)malloc(size*sizeof(char**));
for(i = 0; i < size; i++) {
scanf("%d", &num);
*(ans + i) = arr + (num - 1);
}
return ans;
}

例如,我想要实现的这个函数是arr=["a","b","c"]和size=2,然后scanf得到arr中元素的索引,num=1和3,返回的ans应该是["a","c"]。但我不知道我的代码中的错误在哪里,它只是返回["a","b"]。

使用您的表示法,您将返回

[
arr + 0,
arr + 2
]

或多或少是

[
[ "a", "b", "c" ],
[ "c" ]
]

但你说你想要

[
"a",
"c"
]

哪个是

[
*( arr + 0 ),  // aka arr[ 0 ] aka arr[ 1 - 1 ]
*( arr + 2 )   // aka arr[ 2 ] aka arr[ 3 - 1 ]
]

首先修复返回类型,然后更换

*(ans + i) = arr + (num - 1);

带有

*(ans + i) = *(arr + (num - 1));

固定:

char** get_func( size_t n, char** arr ) {
char** ans = malloc( n * sizeof( char* ) );
// Error handling missing.
for ( size_t i=0; i<n; ++i ) {
size_t j;
scanf( "%zu", &j );
// Error handling missing.
ans[ i ] = arr[ j - 1 ];
}

return ans;
}

我还改用了更合适的size_t,并使用了我认为更传统的名称。但这与问题无关。

最新更新