C char数组追加缓冲区溢出

时间:2017-12-22 00:18:40

标签: c

char *pear = "";
int f=0;

while(f != 20) {
    pear[f] = 'a';
    f++;
}

所以我想在char字符串中添加一个' 为什么这会导致缓冲问题 我不能使用我不喜欢的strcat。

1 个答案:

答案 0 :(得分:0)

将字符串初始化为

char * pear = "";

禁止对其进行修改。相比之下,

char pear [] = "";

允许您在之后修改字节0(但不是后续字节)而不会出现错误。但是,由于字符串中的最后一个字节需要为0,因此覆盖它不是一个好主意。

更重要的是,你试图给出最多20个元素的值 - 你需要至少21个元素的空间。另外,请注意终止字符 - 您需要数组中的最后一个元素为0才能成为字符串。现在看起来你只是试图将字符写入数组而不正确地终止它。

如果您事先不知道阵列的大小,可以使用动态内存分配: malloc realloc (并且不要最后忘记免费