【发布时间】:2019-06-27 14:42:25
【问题描述】:
我正在传入一个指针函数数组,并且想要获取数组的元素。该函数总是返回最后一个元素。为什么?
#include <iostream>
#include <cstring>
using namespace std;
template<typename T> T maxn(T [], int);
template<> const char * maxn(const char *[], int);
int main(int argc, char const *argv[])
{
char *arr_cha[] = {new char[4], new char[5]};
strcpy(arr_cha[0], "abc");
strcpy(arr_cha[1], "abcd");
cout << arr_cha[1] << endl;
cout << maxn(arr_cha, 2) << endl;
return 0;
}
template<typename T> T maxn(T arr[], int len)
{
T max = arr[0];
for(int i=1;i<len;i++){
max = max < arr[i] ? arr[i] : max;
}
return max;
}
template<> const char * maxn(const char *arr[], int len)
{
return arr[0];
}
控制台:
abcd
abcd
当我不在堆上分配字符串时,一切正常。
例子:
char str1[] = "abc";
char str2[] = "abcd";
char *arr_cha[] = {str1, str2};
【问题讨论】:
-
我们可以得到minimal reproducible example 吗?由于代码无法编译,如果我们删除
template<>以使其编译,那么它仍然无法编译。 -
在我修复了代码使其可以编译后,我无法重现该问题。
-
嗯..它没有!
-
@NathanOliver 代码已更新。 Test run