在 C++ 中查找 char 数组的大小
finding size of char array in C++
我正在从用户那里获取 char 数组并试图找到它的大小,但它无法正常工作。
我的代码如下所示:
int main()
{
char str[] ={}
cout << "Enter a characters ";
cin >> str;
int arrSize = sizeof(str);
cout << arrSize;
return 0;
}
当我像下面的代码那样定义数组时,它将起作用:
int main()
{
char str[] ={"1234"}
int arrSize = sizeof(str);
cout << arrSize;
return 0;
}
我不习惯C++,请高人帮帮我。
欢迎来到 C++ stdlib 的奇妙世界。
如果使用 c++ 更好地使用 stdlib 的全部强度。
string str;
std::getline(cin, str);
然后你可以使用 str.size() 来获取它的长度。
查找 cppreference.com 以获取有关 stdlib 函数和 类.
的任何帮助
您给定的代码片段中有两个错误:
错误 1
在 C++ 中,数组的大小必须是编译时间常数。所以你不能写这样的代码:
int n = 10;
int arr[n]; //incorrect
正确的写法是:
const int n = 10;
int arr[n]; //correct
出于同样的原因,您的代码中的以下代码也不正确:
char str[] ={};//this defines(and declares) an empty array. This statement is not fine(that is it is incorrect) because we cannot have 0 size arrays in c++
cin >> str; //incorrect because a built in array is fixed size container and you cannot add more elements(than its size) to it(both by user input or by the programmer itself)
错误1的解决方法
char str[100] ={}; //this defines an array of fixed size 100.
cin >> str; //this is correct now, but note that you can only safely enter upto 100 characters. If you try to add more than 100 than this will also become incorrect
错误2
您计算数组大小的方式有误。正确的方法是:
int arrSize = sizeof(str)/sizeof(char);// since sizeof(char) = 1 you can omit the denominator but note you can omit it only for char type
使用正确的公式 sizeof(str)/sizeof(char)
对于 double
、int
等其他类型的数组很重要。这是通用公式。但是因为 sizeof(char) = 1;
所以你使用的公式是正确的(仅适用于 char
)。所以如果你有一个 double
的数组,那么你应该使用 sizeof(str)/sizeof(double);
.
此外,请注意,您 can/should 而不是使用 std::string
从用户那里获取输入,然后使用 size()
方法来计算输入的时长:
std::string str;
std::cin >> str;
std::cout<<"size is "<<str.size()<<std::endl;
请注意,您还可以在 C++17 中使用 std::size
来查找数组的大小。(@eerorika 在下面的评论中指出)
C 中的数组是静态的。创建空的字符数组 char str[] = {}
后,您不能用任意数量的字符填充它。静态 C 风格数组的大小是在编译时计算的,以及 sizeof()
运算符。如果由于某种原因你真的必须使用 C 风格的字符串(字符数组),首先在你的数组中分配足够的 space 然后使用 strlen()
函数来确定字符串长度。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[256];
cin >> str;
int arrSize = strlen(str);
cout << arrSize;
}
但是,由于您使用的是 C++(而非 C),因此在您的情况下最好使用 std::string
。
#include <iostream>
using namespace std;
int main()
{
string str;
cin >> str;
int arrSize = str.size();
cout << arrSize;
}
顺便说一句,你 don't need return 0;
在 C++ 中。
我正在从用户那里获取 char 数组并试图找到它的大小,但它无法正常工作。
我的代码如下所示:
int main()
{
char str[] ={}
cout << "Enter a characters ";
cin >> str;
int arrSize = sizeof(str);
cout << arrSize;
return 0;
}
当我像下面的代码那样定义数组时,它将起作用:
int main()
{
char str[] ={"1234"}
int arrSize = sizeof(str);
cout << arrSize;
return 0;
}
我不习惯C++,请高人帮帮我。
欢迎来到 C++ stdlib 的奇妙世界。 如果使用 c++ 更好地使用 stdlib 的全部强度。
string str;
std::getline(cin, str);
然后你可以使用 str.size() 来获取它的长度。 查找 cppreference.com 以获取有关 stdlib 函数和 类.
的任何帮助您给定的代码片段中有两个错误:
错误 1
在 C++ 中,数组的大小必须是编译时间常数。所以你不能写这样的代码:
int n = 10;
int arr[n]; //incorrect
正确的写法是:
const int n = 10;
int arr[n]; //correct
出于同样的原因,您的代码中的以下代码也不正确:
char str[] ={};//this defines(and declares) an empty array. This statement is not fine(that is it is incorrect) because we cannot have 0 size arrays in c++
cin >> str; //incorrect because a built in array is fixed size container and you cannot add more elements(than its size) to it(both by user input or by the programmer itself)
错误1的解决方法
char str[100] ={}; //this defines an array of fixed size 100.
cin >> str; //this is correct now, but note that you can only safely enter upto 100 characters. If you try to add more than 100 than this will also become incorrect
错误2
您计算数组大小的方式有误。正确的方法是:
int arrSize = sizeof(str)/sizeof(char);// since sizeof(char) = 1 you can omit the denominator but note you can omit it only for char type
使用正确的公式 sizeof(str)/sizeof(char)
对于 double
、int
等其他类型的数组很重要。这是通用公式。但是因为 sizeof(char) = 1;
所以你使用的公式是正确的(仅适用于 char
)。所以如果你有一个 double
的数组,那么你应该使用 sizeof(str)/sizeof(double);
.
此外,请注意,您 can/should 而不是使用 std::string
从用户那里获取输入,然后使用 size()
方法来计算输入的时长:
std::string str;
std::cin >> str;
std::cout<<"size is "<<str.size()<<std::endl;
请注意,您还可以在 C++17 中使用 std::size
来查找数组的大小。(@eerorika 在下面的评论中指出)
C 中的数组是静态的。创建空的字符数组 char str[] = {}
后,您不能用任意数量的字符填充它。静态 C 风格数组的大小是在编译时计算的,以及 sizeof()
运算符。如果由于某种原因你真的必须使用 C 风格的字符串(字符数组),首先在你的数组中分配足够的 space 然后使用 strlen()
函数来确定字符串长度。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[256];
cin >> str;
int arrSize = strlen(str);
cout << arrSize;
}
但是,由于您使用的是 C++(而非 C),因此在您的情况下最好使用 std::string
。
#include <iostream>
using namespace std;
int main()
{
string str;
cin >> str;
int arrSize = str.size();
cout << arrSize;
}
顺便说一句,你 don't need return 0;
在 C++ 中。