首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将其他随机字符添加到已编译代码中

将其他随机字符添加到已编译代码中
EN

Stack Overflow用户
提问于 2022-11-20 19:04:39
回答 1查看 42关注 0票数 0

在这里输入图像描述

下面是C++中的代码,但是在编译和查看结果之后,会向程序应该显示编译结果的字符中添加一些随机字符,如上图所示,为什么会出现这种情况,为什么在代码中添加那些未声明的字符?

这是我的代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{

        char big_characters[26] = {'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M'};
            cout << big_characters;
    cout << endl << endl;
        char small_characters[26] = {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm'};
            cout << small_characters;
    cout << endl << endl;
        char digits[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
            cout << digits;
    cout << endl << endl;   
        char special_characters[32] = {'`', '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '[', ']', '{', '}', ';', ':', '|', ',', '<', '.', '>', '/', '?', char(34), char(39), char(92)};
            cout << special_characters;
    cout << endl << endl;
    
    return 0;
}

正如我前面提到的,一些随机字符作为编译的结果添加到我的代码中。我不知道为什么会这样

我认为解决这个问题的方法是使用字符串而不是单个字符(char),我想知道为什么会发生这种情况-- 编译结果如上

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-20 19:11:07

因此,如果要输出没有随机字符的数组(未定义行为),则需要使用简单的for循环,然后得到正确的输出,如下所示:

代码语言:javascript
复制
#include <iostream>

using namespace std;

int main() {
    char big_characters[26] = {'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O',
                               'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K',
                               'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M'};
    for (int i = 0; i < 26; i++) {
        cout << big_characters[i];
    }
    cout << endl << endl;
    char small_characters[26] = {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o',
                                 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k',
                                 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm'};
    for (int i = 0; i < 26; i++) {
        cout << small_characters[i];
    }
    cout << endl << endl;
    char digits[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
    for (int i = 0; i < 10; i++) {
        cout << digits[i];
    }
    cout << endl << endl;
    char special_characters[32] = {
        '`', '~', '!', '@', '#', '$', '%', '^',      '&',      '*',     '(',
        ')', '-', '_', '=', '+', '[', ']', '{',      '}',      ';',     ':',
        '|', ',', '<', '.', '>', '/', '?', char(34), char(39), char(92)};
    for (int i = 0; i < 32; i++) {
        cout << special_characters[i];
    }
    cout << endl << endl;

    return 0;
}

你可以看到它的实况这里。它的输出:

代码语言:javascript
复制
QWERTYUIOPASDFGHJKLZXCVBNM

qwertyuiopasdfghjklzxcvbnm

1234567890

`~!@#$%^&*()-_=+[]{};:|,<.>/?"'\

结尾没有随机字符。

或者,可以使用std::cout成员函数write()代替硬编码的for循环。

代码语言:javascript
复制
cout.write(special_characters, 32);

因此,您将执行cout.write(,然后是数组的名称,例如special_characters,,然后是大小,例如32,然后是);。他们都有相同的输出,这只是两种方法得到相同的东西。但是第二种方法避免了硬编码:for(...),循环。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74511091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档