第二个char数组在从文件进行fread后覆盖第一个char数组

时间:2017-10-18 05:39:04

标签: c arrays file-io

目标是使用C从文件中读取数据(可以是文本或二进制),然后附加到现有字符串

我有2个char数组,一个是现有字符串(s1),另一个是字符串(s2)我将缓冲区字符数组(buf)附加到

size_t readCounter = 0;
char buf[16];
char s1[] = "hello ";
char s2[] = ""

while (1) {
    readCounter = fread(buf, sizeof(char), strlen(buf), fp);

    if (readCounter == 0) {
        break;
    }

    strcat(s2, buf);    
}

printf("%s", s1);
printf("%s", s2);

问题:

当我打印出s1时,它不再是" hello",它包含文件中的字符,因此出于某种原因,第一个char数组被覆盖在内存中。为什么会这样?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

readCounter = fread(buf, sizeof(char), strlen(buf), fp);

这是一个问题。此时,buf不包含字符串,因此将其传递给strlen是错误的。

此外:

char s2[] = "";
...
strcat(s2, buf);

这不好。当您指定s2时,它指向一个空字符串。因此,数组的大小可以容纳一个空字符串。将s2传递给strcat后,您就会尝试追加它 - 但它没有任何额外的空间。