将零复制到char数组中也会清除其他char数组

时间:2016-03-09 20:20:00

标签: c++ arrays file-io buffer

char x[30];
char* y[5];
int count = 0;
ifstream i("test.txt", std::ifstream::binary);

x从ifstream缓冲区读取30个字节的文件。 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 个答案:

答案 0 :(得分:1)

由于y[0]是一个指针,它可以指向(或进入)x。您观察到的行为表明它确实存在。如果y[0]指向(或进入)x,则更改x的内容将更改y[0]指向的内容。