为什么程序的输出会在计算机之间发生变化

时间:2013-11-28 23:57:02

标签: c

这是作业,但在搜索了一个小时之后,我还没有找到更接近答案。

考虑以下计划:

#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,有人可以向我解释原因吗?

2 个答案:

答案 0 :(得分:4)

当然,strcpy可能会插入一个空字节,但您绝对不会在\0循环中复制for i = 0; i < strlen(s); i++) ...

答案 1 :(得分:0)

字符串t未终止,因此对strlen(t)的调用将导致未定义的行为。