这是作业,但在搜索了一个小时之后,我还没有找到更接近答案。
考虑以下计划:
#include <stdio.h>
#include <string.h>
int main(){
char s[10], t[10];
int i, j;
strcpy(s, "frog");
for(i=0; i<strlen(s); i++)
t[i] = s[i];
j = 0;
for(i=0; i<strlen(t); i++)
j = j+(int)t[i];
printf("%d\n", j);
return 0;
}
该程序的预期输出为430,但它通常会产生不同的结果。结果似乎会根据程序运行的时间或运行的计算机而改变。为什么呢?
根据我的理解,strcopy将使s = {'f','r','o','g','\0',..}
和strlen(s)
始终返回4.运行以下循环t = {'f','r','o','g',..}
。我可以看到它返回430以外的唯一方法是,如果在g之后t的值不是\ 0,则导致strlen(t)
返回大于4的值。
所以,如果我认为问题出现是正确的,因为在数组的第五个位置可能没有\ 0,有人可以向我解释原因吗?
答案 0 :(得分:4)
当然,strcpy
可能会插入一个空字节,但您绝对不会在\0
循环中复制for i = 0; i < strlen(s); i++)
...
答案 1 :(得分:0)
字符串t
未终止,因此对strlen(t)
的调用将导致未定义的行为。