新手 - 将char *转换为字符串

时间:2013-11-25 11:26:45

标签: c++ visual-c++

我的功能如下:

int main(int argc, char *argv[])
{

}

我想在argv[1]中找到一个字符(点字符)。我尝试将char*转换为如下字符串:

std::string para2="";
if(argc==2 && argv[1]!=NULL)
{
    para2 = string(argv[1]);
}

para2使用print命令显示奇怪的字符,并且查找功能无法正常工作。请指导我如何在char*类型中找到字符。

由于

3 个答案:

答案 0 :(得分:1)

以下是一些注意事项:

注意#1:

std::string para2="";

构造字符串时,默认构造函数初始化一个空字符串,因此您不需要=""部分:std::string para2;就好了。

注意#2:

if(argc==2 && argv[1]!=NULL)
{
    para2 = string(argv[1]);
}

当您从char*分配到std::string时,您可以使用operator=重载,而不使用明确的string部分:

para2 = argv[1];

根据对您的问题的一些评论中的某些请求,您可以使用std::string::rfind检查某些扩展名,例如:

#include <iostream>
#include <string>

int main(int argc, char * argv[])
{
    std::string param2;

    if (argc == 2)
    {
        param2 = argv[1];
    }

    std::cout << param2 << std::endl;

    if (param2.rfind(".jpg") != std::string::npos)
    {
        std::cout << "JPEG file." << std::endl;
    }
}

答案 1 :(得分:0)

您可能正在将EXE构建为UNICODE。

尝试在属性 - >常规

中将“字符集”设置为“使用多字节字符集”

答案 2 :(得分:0)

您可能使用错误的printf。您可以使用std :: cout输出para2但不使用printf作为字符串类型。因为printf只能打印出原始类型,如int,double,float,ulong,char,char *等。

#include <iostream>
#include <string>

int main(int argc, char* argv[])
{
    std::string para2="";
    if(argc==2 && argv[1]!=NULL)
    {
        para2 = std::string(argv[1]);
        std::cout<<para2<<std::endl;
    }
    return 0;
}

您可以参考"printf" on strings prints gibberish"printf" on strings prints gibberish

如果要在char *中找到指定的字符串,可以使用strstr()函数来执行此类操作。而string :: find也可以进行查找工作,你可以参考http://www.cplusplus.com/reference/string/string/find/

对于string :: find函数,返回值为size_t类型。返回值返回第一个匹配的第一个字符的位置。如果未找到匹配项,则函数返回string :: npos。

您应该始终使用string :: npos作为检查条件,但不能使用0。