Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何找到LPCSTR的长度_C++_Lpcstr - Fatal编程技术网

C++ 如何找到LPCSTR的长度

C++ 如何找到LPCSTR的长度,c++,lpcstr,C++,Lpcstr,我试图使用atoi()将LPCSTR转换为整数,为了验证转换是否成功,我想计算它生成的整数和原始LPCSTR中的位数(它应该只包含整数) 我很难找到计算LPCSTR长度的好方法。到目前为止,唯一的办法似乎是数到一个“/0” 对更好的方法有什么建议吗 谢谢不 这就是计算c字符串长度的方法。您可以使用strlen,但它仍然必须向下遍历整个字符串并计算'\0'strlen不就是这样做的吗?您可以使用并使用返回的endptr检查它是否是字符串的结尾(0字节) 计数不一定准确。“00”将产生0,但0有一个

我试图使用atoi()将LPCSTR转换为整数,为了验证转换是否成功,我想计算它生成的整数和原始LPCSTR中的位数(它应该只包含整数)

我很难找到计算LPCSTR长度的好方法。到目前为止,唯一的办法似乎是数到一个“/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();