C++ 如何找到LPCSTR的长度
我试图使用atoi()将LPCSTR转换为整数,为了验证转换是否成功,我想计算它生成的整数和原始LPCSTR中的位数(它应该只包含整数) 我很难找到计算LPCSTR长度的好方法。到目前为止,唯一的办法似乎是数到一个“/0” 对更好的方法有什么建议吗 谢谢不C++ 如何找到LPCSTR的长度,c++,lpcstr,C++,Lpcstr,我试图使用atoi()将LPCSTR转换为整数,为了验证转换是否成功,我想计算它生成的整数和原始LPCSTR中的位数(它应该只包含整数) 我很难找到计算LPCSTR长度的好方法。到目前为止,唯一的办法似乎是数到一个“/0” 对更好的方法有什么建议吗 谢谢不 这就是计算c字符串长度的方法。您可以使用strlen,但它仍然必须向下遍历整个字符串并计算'\0'strlen不就是这样做的吗?您可以使用并使用返回的endptr检查它是否是字符串的结尾(0字节) 计数不一定准确。“00”将产生0,但0有一个
这就是计算c字符串长度的方法。您可以使用
strlen
,但它仍然必须向下遍历整个字符串并计算'\0'
strlen不就是这样做的吗?您可以使用并使用返回的endptr
检查它是否是字符串的结尾(0字节)
计数不一定准确。“00”将产生0,但0有一个数字,原始字符串的长度为2。该函数就是您要查找的函数
示例用法:
size_t len = strlen( szNumber );
谈论产生比光更多的热量…:)停止使用“atoi”,这将解决您的大部分问题。”“atoi”是一个没有实用价值的死函数。将字符串表示形式转换为数字的正确方法是使用“strto…”组(“strtol”、“strtoul”等)中的函数。这些函数将返回足够的信息,以便立即确定是否发生了转换错误。我会做一些不同的事情——使用输入初始化stringstream,读取int,然后检查流是否为空:
#include <sstream>
#include <iostream>
typedef char const *LPCSTR;
template <class T>
bool check_read(LPCSTR input, T &val) {
std::istringstream reader(input);
reader >> val;
char ch;
if (reader >> ch) {
std::cerr << "\nUnconverted character: " << ch << std::endl;
return false;
}
return true;
}
int main() {
LPCSTR inputs[] = {"12345", "54321a"};
int a;
for (int i=0; i<2; i++) {
check_read(inputs[i], a);
std::cout << "Converted: " << a << std::endl;
}
return 0;
}
#包括
#包括
类型定义字符常量*LPCSTR;
模板
布尔校验读取(LPCSTR输入,T&val){
std::istringstream阅读器(输入);
读者>>瓦尔;
char ch;
如果(读卡器>>ch){
std::cerr要查找LPCTSTR
的长度(在本例中是位数),您应该使用lstrlen()
而不是strlen()
。来源:因为LPCSTR
只是const char*
(反宏化后),strlen
然而,如果你想要一个明确定义为与LPCSTR
输入相对应的windows函数,那么你可以使用lstrlenA
。我严重怀疑调用此函数和调用strlen
有什么实际区别。Doh!对不起,伙计们,大脑放屁。一定是有某种精神障碍,无法记住t他一个也没在我的任何一本书上看到searches@sean由于这个答案被错误地接受,您能更新它并将其记入下面的MrD吗?
LPCSTR lpText = "test";
long lTextLen = CString(lpText).GetLength();