【问题标题】:Copying zeroes into a char array clears other char array as well [closed]将零复制到 char 数组中也会清除其他 char 数组[关闭]
【发布时间】:2016-03-09 20:20:00
【问题描述】:
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,我也会观察到相同的行为。我该如何解决?

【问题讨论】:

  • xy(或 y[0])是如何关联的?
  • 能否提供一个可验证(可编译)的示例?
  • 我敢打赌,您在读取循环中将 y[0] 分配给 x,而不是分配内存和复制
  • 您正在为char *y[5] 的5 个元素分配内存,不是吗?... y[0] =malloc(SOME_VAL);, ... y[4] = malloc(SOME_VAL );
  • 提醒:y 数组是指针数组,而不是字符数组。

标签: c++ arrays file-io buffer


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多