从字符数组中提取字符串

Extracting string from character array

本文关键字:提取 字符串 数组 字符      更新时间:2023-10-16

我尝试过memcpy/strncpy/std::copy,但它们似乎都不起作用,导致程序崩溃。

这是我需要做的:

我正在尝试解析用户输入的参数。"message -add 0xAE"

我需要将0xAE部分获取为整数,这里有一些伪代码_input将保存完整的字符串"message -add 0xAE"

if(strstr(_input,"message -add 0x")){
    char* _temp;
    std::copy(strlen("message -add 0x"),strlen("message -add 0x")+(strlen(_input)-strlen("message -add  0x")),_temp);
    /* or */
    memcpy(_temp,_input+strlen("message -add 0x"),strlen(_input)-strlen("message -add 0x"));
    int _value = (int)_temp;
    CLog->out("nn %d",_value);
}
编辑:谢谢Alan!
if(strstr(_input,"message -add 0x")){
            char* _temp = new char[strlen(_input)-strlen("message -add 0x")];
            memcpy(_temp,_input+strlen("message -add 0x"),strlen(_input)-strlen("message -add 0x"));
            int _value = atoi(_temp);
            CLog->out("nn %d",_value);
}

您在找:

int value = 0;
char c;
for(int i = strlen("message -add 0x"); c = *(_input + i); i++) {
    value <<= 4;
    if(c > '0' && c <= '9') {
        // A digit
        value += c - '0';
    } else if(c >= 'A' && c < 'G') {
        // Hexadecimal
        value += 10 + c - 'A';
    }
}

?

如果您想使用c++,那么请避开各种C函数和所有讨厌的内存管理。我推荐阅读加速c++。它确实是一本学习c++和实际使用c++的顶级书籍。下面是不使用C字符串解析例程的另一个解决方案:

#include <iomanip>
#include <iostream>
#include <sstream>
#include <string>

int
main()
{
    std::string const TARGET("message -add 0x");
    char const _input[] = "message -add 0xAE23";
    std::string input(_input);
    std::string::size_type offset = input.find(TARGET);
    if (offset != std::string::npos) {
        std::istringstream iss(input);
        iss.seekg(offset + TARGET.length());
        unsigned long value;
        iss >> std::hex >> value;
        std::cout << "VALUE<" << value << ">" << std::endl;
    }
    return 0;
}