2016-03-09 2 views
-3
char x[30]; 
char* y[5]; 
int count = 0; 
ifstream i("test.txt", std::ifstream::binary); 

x считывает 30 байтов файла из буфера ifstream. y хранит случайную строку.Копирование нулей в массив символов также очищает другой массив символов

while (i.read(x, sizeof(x)) { 
    y[count] = x; 
    printf("%s\n", y[0]); //This prints "test\n" 
    bzero(x, sizeof(x)); //Clear the contents of array x 
    printf("%s\n", y[0]); //This prints "\n" 
    count++ 
} 

В этом примере предположим, что файл содержит меньше или равен 150 байтам данных.

Почему это продолжается? Я наблюдаю такое же поведение, даже если я использую memset. Как это исправить?

+1

Как связаны 'x' и' y' (или 'y [0]')? –

+0

Массив y должен хранить байты, считанные из файла, используя x. В конце итераций я хочу, чтобы y содержала сохраненные значения. – ExtremistEnigma

+2

Не могли бы вы предоставить поддающийся проверке (компилируемый) пример? – EOF

ответ

1

С y[0] является указателем, он может указывать на (или в) x. Поведение, которое вы наблюдаете, предполагает, что это так. Если y[0] указывает на (или в) x, то изменение содержимого x изменит содержание, которое y[0] указывает на.

Смежные вопросы