我正在尝试从书籍示例(CERT C编码标准)执行示例。书中的例子是完整的程序,而不是抽象的代码 RULE STR31-C:保证字符串的存储空间足以容纳字符数据和空终结符。
#include <stdio.h>
#include <stddef.h>
enum {ARRAY_SIZE = 32 };
int main(void)
char dest [ARRAY_SIZE] = {1,2,3,4,5};
char src[ARRAY_SIZE];
size_t i;
for (i = 0;src[i] && (i < sizeof(dest)-1);++i)
{
dest[i] = src[i];
}
dest [i] = '\0'; //this over writing the dest[0],Right?
printf("original -> copied \n");
for(i = 0; i < 5; ++i)
{
printf(" %2d %2d\n", src[i], dest[i]);
}
return 0;
}
输出:
original -> copied
0 0
0 2
0 3
0 4
0 5
问题1.我理解dest [0] - 重写&#39; \ 0&#39;。它不应该发生......如何修复或更改此设计。
问题2:src []都变为0.为什么?不能理解。或者我想念一些基本的东西:(
答案 0 :(得分:1)
src []都变为0.为什么?不能理解。或者我想念一些东西 基本:(
您尚未将任何内容初始化为src
。
dest [i] ='\ 0'; //这个写了dest [0],对吧?
我的问题是你为什么这么认为?毕竟i
不等于0
答案 1 :(得分:0)
固定。现在按预期工作。我的错。错误的src []和dest [] inter改变了。