目标是使用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数组被覆盖在内存中。为什么会这样?我该如何解决这个问题?
答案 0 :(得分:4)
readCounter = fread(buf, sizeof(char), strlen(buf), fp);
这是一个问题。此时,buf
不包含字符串,因此将其传递给strlen
是错误的。
此外:
char s2[] = "";
...
strcat(s2, buf);
这不好。当您指定s2
时,它指向一个空字符串。因此,数组的大小可以容纳一个空字符串。将s2
传递给strcat
后,您就会尝试追加它 - 但它没有任何额外的空间。