c ++为什么我得到垃圾输出数组?

时间:2017-07-14 01:57:53

标签: c++ arrays

以下是代码:

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int keyArray[7] = {1,2,3,4,5,6,7};
    int breakPoint;
    int counter;
    for (counter = 0; counter < 7; counter++)
    {
        //      keyArray[counter] = (rand() % 9) + 1; later
        keyArray[counter] = counter;  //testing
    }
    cout << keyArray[0] + "\n";
    cout << keyArray[1] + "\n";
    cout << keyArray[2] + "\n";
    cout << keyArray[3] + "\n";
    cout << keyArray[4] + "\n";
    cout << keyArray[5] + "\n";
    cout << keyArray[6] + "\n";
    cin >> breakPoint;  //so I can see what the hell is going on before it disappears
    return 0;
}

我给keyArray赋值的唯一原因是我在回答一个类似的问题时,你必须先使用数据初始化数据才能使用它。但它没有任何区别。无论你是否初始化,输出都只是垃圾符号。

编译器是Visual Studio Community 2017.感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

错误不在您的逻辑中,而是在您的调试输出中。由于其他答案集中在如何解决它,我宁愿解释发生了什么。关于字符串在C ++中的工作方式似乎存在误解。

失败就在这个操作中:

keyArray[0] + "\n"

在内部,字符串文字是字符数组,在本例中为const char[2],由换行符和终止'\0' null终止符组成。然后,当您尝试将整数和此数组一起添加时,数组将由指向其第一个元素的指针表示,即它将衰减const char*以便用作代码中使用的plus operator的第二个参数。

因此,对于编译器,此行需要operator+(int, const char*)。但结果是const char*,输入指针偏移整数,因为这是向指针添加整数时发生的操作。

因此,不是打印数字,而是打印字符串,它将尝试访问一个不存在的字符串,因为指针现在指向字符串&#34; \ n&#34;因此进入一些任意的记忆。

答案 1 :(得分:0)

而不是做

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int keyArray[7] = {1,2,3,4,5,6,7};
    int breakPoint;
    int counter;
    for (counter = 0; counter < 7; counter++)
    {
        //      keyArray[counter] = (rand() % 9) + 1; later
        keyArray[counter] = counter;  //testing
    }
    cout << std::to_string(keyArray[0]) + "\n";
    cout << std::to_string(keyArray[1]) + "\n";
    cout << std::to_string(keyArray[2]) + "\n";
    cout << std::to_string(keyArray[3]) + "\n";
    cout << std::to_string(keyArray[4]) + "\n";
    cout << std::to_string(keyArray[5]) + "\n";
    cout << std::to_string(keyArray[6]) + "\n";
    cin >> breakPoint;  //so I can see what the hell is going on before it disappears
    return 0;
}

做的:

cout << keyArray[0] + "\n"

cout << keyArray[0] << "\n"

您不能使用字符串连接整数。这就是你输入垃圾的原因

答案 2 :(得分:0)

首先尝试:

cout << keyArray[0] << "\n";

如果您使用的是支持C++ 11的编译器,请在添加前尝试使用std::to_string(...)从整数中创建一个字符串:

cout << (std::to_string(keyArray[0]) + "\n");

答案 3 :(得分:0)

你不能用字符串连接int。

更改

cout << keyArray[0] << "\n"
<< keyArray[1] << "\n"
<< keyArray[2] << "\n"
<< keyArray[3] << "\n"
<< keyArray[4] << "\n"
<< keyArray[5] << "\n"
<< keyArray[6] << endl;

{{1}}

答案 4 :(得分:-1)

您需要将整数转换为字符串。使用相对较新版本的C ++:

$('#txt_ssn').on('change focus', function(){

                if ($(this).val().trim().length === 0) {
                $(this).mask("999-99-9999");
                }

            });