0

我正在为我的计算机科学一门课程做一个项目,但在尝试获取包含 char 值的数组的确切大小时遇到​​了麻烦。首先,程序提示用户输入 char 值,通过使用行cin.getline(array,100);之后,它获取数组,然后传递给它一个 getSize 函数,该函数假定返回数组的实际大小。唯一的问题是它并不矛盾。有时它会返回正确的值,但有时它不会。获取大小函数:

int getSize(char arr[]){
    int i = 0;  
    for(i; '\0' != arr[i];i++){ 
    }
    return i;
}

示例:arr[100] 包含 5 个字符,其余为空,但函数在程序运行时返回 7。我不确定这是否是一个问题,但程序会在将数组发送到 size 函数之前对其进行修改。它会删除重复项。

4

4 回答 4

4

由于您正在处理数组,请使用 strlen 函数

strlen(array);

请注意,对于更像 C++(面向对象等)的字符串,还有一个 getline重载

std::string line;
std::getline(std::cin, line);
size_t len = line.length();
于 2013-10-31T05:25:18.630 回答
1
template<size_t t_size>
size_t GetRealSize(const char (&str)[t_size])
{
    return std::count_if(&str[0], &str[t_size], [](char c) { return !!c; });
}

这可能是你想要的。

于 2013-10-31T05:01:40.213 回答
0

这不能仅用指针来完成。指针不包含有关数组大小的信息——它们只是一个内存地址。因为数组在传递给函数时会衰减为指针,所以会丢失数组的大小。

一种方法是使用Templates

template <typename T, size_t N>
size_t array(const T (&buffer)[N])
{
cout << "size: " << N << endl;
return N;
}

然后,您可以像这样调用函数(就像任何其他函数一样):

int main()
{
char a[10];
array(a);
}

输出:

size: 10
于 2013-10-31T05:02:30.373 回答
0

您可以轻松地使用sizeof()运算符来获取大小,...

如果你有char a[10];

利用

int size=sizeof(a);
于 2013-10-31T05:28:42.357 回答