将c风格字符串传递给c++函数

Pass a c style string to a function C++

本文关键字:c++ 函数 风格 字符串      更新时间:2023-10-16

我写了一个函数来反转一个c风格的字符串,如下所示

void reverse1(char* str) {
    char* str_end = strchr(str, 0);
    reverse(str, str_end);
}

,并使用此函数打印反向字符串

void print(char* str) {
    for (int i=0; i!=sizeof(str); ++i) {
        cout << int(*(str+i)) << 't';
    }
    cout << endl;
}

反转后,打印结果为:103 110 105 114 116 115 0 0会多出一个0。我不知道这是为什么。希望有人能帮助我。非常感谢!

表达式sizeof(str)在64位平台上的结果为8。因此,在标准输出中得到8个数字。

在c++中编程时,应该尝试使用std::string。如果你坚持使用C风格的字符串,你可以把输出写成:

void print(char* str) {
    for (int i=0; i<=strlen(str); ++i) {
        cout << int(*(str+i)) << 't';
    }
    cout << endl;
}

void print(char* str) 
{
    do {
        cout << int(*str) << 't';
    } while (*str++);
    cout << endl;
}

正如@harper所说

你应该在c++中使用std::string

如果是这样,最简单的方法(对我来说)打印反向字符串并查看每个字符代码是

std::copy( str.rbegin(), str.rend(), std::ostream_iterator< int >( std::cout, "t" ) );

std::copy( str.rbegin(), str.rend(), std::ostream_iterator< char >( std::cout, "t" ) );

查看每个字符本身