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
,并使用了我认为更传统的名称。但这与问题无关。