2014-09-21 40 views
0

我试图将char []传递给另一个函数,但出于某种原因,我不断收到奇怪的输出,但没有错误。我有以下几种方法:将char []传递给另一个函数时出现奇怪的输出

void storeKey() 
{ 
    char keyArray[10]; 
    cout << "Please enter 10bit key" << endl << "==> "; 
    cin >> keyArray; 
    storePlaintext(keyArray); 
    cout << keyArray << endl; 
} 

void storePlaintext(char key[]) 
{ 
    char plaintextArray[8];  
    cout << "Please enter 8bit plaintext" << endl << "==> "; 
    cin >> plaintextArray; 

    cout << plaintextArray << endl << key[1] << endl; 
    //cout << plaintextArray << endl << key << endl; 
} 

我应该得到一个打印出来的:00000000和1111111111在下一行接着1111111111 但我得到0000000那么“C”(或随机的东西),其次是111111111 WHY这是否发生?我应该能够通过一个数组像我没有问题没有对吗?我需要能够将数组从函数传递到函数并使用它们中的数据。任何帮助都感激不尽。谢谢

+0

如果数组长度为10个字符,则不能在其中存储超过9个字符而不会导致未定义的行为,因为您需要第10个点用于空终止符。所以输出'1111111111'会表明你已经触发了UB,输入的字符串长于程序可以定义的方式处理的时间。 – cdhowie 2014-09-21 04:27:00

+4

使用'std :: string'。缓冲区溢出是一个问题,std :: string只能解决。 – chris 2014-09-21 04:27:17

+0

即使您没有使用std :: string,也不要声明与您想要的大小非常接近的数组,您没有任何错误余量。如果你已经用50个字符声明了这些数组,你就不会遇到这个问题(但仍然使用'std :: string',所有这些问题都会消失)。 – PaulMcKenzie 2014-09-21 04:27:55

回答

2

使用std::string

#include <string> 
#include <fstream> 
#include <iostream> 

using namespace std; 

void storePlaintext(const string& key); 

void storeKey() 
{ 
    std::string keyArray; 
    cout << "Please enter 10bit key" << endl << "==> "; 
    getline(cin, keyArray); 
    storePlaintext(keyArray); 
    cout << keyArray << endl; 
} 

void storePlaintext(const string& key) 
{ 
    string plaintextArray;  
    cout << "Please enter 8bit plaintext" << endl << "==> "; 
    getline(cin, plaintextArray); 
    if (key.size() > 1) 
     cout << plaintextArray << endl << key[1] << endl; 
} 

使用注意事项的std::stringstd::getline,并且传递参数由(常数)参考。此外,检查以确保key具有多个字符已完成,因为访问key[1]长度为1或更小的字符串是未定义的行为。

相关问题