在c ++中使用标准模板库中的merge()函数时出现奇怪的输出

ris*_*ain 1 c++ algorithm merge stl

// merge.cpp
// merges two containers into a third
#include <iostream>
#include <algorithm> //for merge()
using namespace std;
int src1[] = { 2, 3, 4, 6, 8 };
int src2[] = { 1, 3, 5 };
int dest[8];
int main()
{ //merge src1 and src2 into dest
    merge(src1, src1+5, src2, src2+3, dest);
    for(int j=0; j<8; j++) //display dest
    cout << dest[j] << '  ';
    cout << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我键入的代码和我期望的是一个已排序的合并数组,但输出结果如下:

1210537622105376321053763210537642105376521053766210537682105376
Run Code Online (Sandbox Code Playgroud)

我改变了数据,重新检查了语法,但我觉得每件事都很好

Tho*_*lik 7

在c ++中,这是一个字符' '(单引号),这是一个字符串" "(双引号).避免对多个字符使用单引号,因为它是实现定义的.

固定

cout << dest[j] << '  ';
Run Code Online (Sandbox Code Playgroud)

cout << dest[j] << ' '; // remove one whitespace
Run Code Online (Sandbox Code Playgroud)

要么

cout << dest[j] << "  "; // change to string
Run Code Online (Sandbox Code Playgroud)

多字符字符常量被解释为整数.在你的情况下' '2105376.用g ++和clang ++ ' '翻译成8224 = 256 * ' ' + ' '.在您的示例中,您忘记了一个空格,或者您的编译器使用不同的方法进行转换:2105376 = 256 * 256 * ' ' + 256 * ' '+ ' '

启用并读取编译器警告.这是编译器告诉我的第一件事.

:13:24: warning: multi-character character constant [-Wmultichar]
Run Code Online (Sandbox Code Playgroud)

  • ****允许d在单引号之间有多个字符,但它通常不是很有用.这是一个[多字符文字](https://en.cppreference.com/w/cpp/language/character_literal)(见第6项); 它的类型是`int`,它的值是实现定义的. (2认同)

Bat*_*eba 6

' '是一个多字符文字,因为它包含多个字符.它是一种int类型,具有实现定义的值,尽管256 * ' ' + ' '很常见.因为它是一个int,所以使用了一个不同的ostream重载char,这会影响你的输出.

" "改用.