如何找到LPCSTR的长度

时间:2009-10-13 18:15:02

标签: c++ lpcstr

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

我很难找到计算LPCSTR长度的好方法。到目前为止,唯一的方法似乎只是计数,直到我到达'/ 0'

有关更好方法的任何建议吗?

由于

9 个答案:

答案 0 :(得分:20)

要查找LPCTSTR的长度(在本例中为位数),您应该使用lstrlen()而不是strlen()。资料来源:MSDN

答案 1 :(得分:13)

这不是strlen的作用吗?

答案 2 :(得分:8)

您可以使用strtol并使用返回的endptr来检查它是否是字符串的结尾(0字节)。

计数不一定准确。 “00”将导致0,但0有一位数,原始字符串长度为2。

答案 3 :(得分:5)

strlen()功能正是您所需要的。

样本用法:

size_t len = strlen( szNumber );

答案 4 :(得分:2)

不。

这就是你如何找到一个c弦的长度。您可以使用strlen,但仍然必须记下整个字符串并计算'\0'之前的字符数。

答案 5 :(得分:2)

谈论产生比光更多的热量...... :)停止使用'ati',这将解决你的大部分问题。 'atoi'是一个没有实际价值的死函数。将字符串表示转换为数字的正确方法是来自'strto ...'组('strtol','strtoul'等)的函数。这些函数会向您返回足够的信息,以确定是否发生转换错误。

答案 6 :(得分:1)

LPCSTR lpText = "test";
long lTextLen = CString(lpText).GetLength();

答案 7 :(得分:0)

我做的事情有点不同 - 用输入初始化字符串流,读取一个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;
}

另一个合理的可能性是strtol或其表兄之一。这些返回指向第一个未转换字符(如果有)的指针,因此它们可以直接告诉您什么是未转换的。它们比流更快但通常不那么灵活 - 例如,如果你想读取浮点数,上面的check_read将按原样运行,但是需要重写使用strtol的东西。

还有一种可能性,你可以考虑使用Boost lexical_cast(它的打包方式略有不同,但与上面的代码非常相似)。

答案 8 :(得分:0)

由于let obj = { z: { y: 99 } }; console.profile("foo"); let foo = ({z: {y},x = `${y+1}`}) => x; //prints 100 foo(obj); console.profileEnd("foo"); console.profile("bar"); let bar = (data) => {let y = data.z.y; let x = `${y+1}`; return x; //also prints 100 } bar(obj); console.profileEnd("bar"); console.time("foo"); for (let i = 0; i < 100; i++) { foo(obj); } console.timeEnd("foo"); console.time("bar"); for (let i = 0; i < 100; i++) { bar(obj); } console.timeEnd("bar");只是LPCSTR(去宏后),const char*会没问题。

但是,如果您在明确定义的Windows功能与strlen输入相对应之后,则可以使用LPCSTR。我非常怀疑这有什么实际的区别,并呼吁lstrlenA