将小写字母转换为大写字母并打印它们

时间:2014-10-25 12:28:55

标签: c arrays loops

当我转换并在同一个循环中打印时,我得到的结果加上我不知道它来自哪里的垃圾。 例如:

输入:

char array_ch[]={'A','B','C','D','E'};
int i=0;
for(i;array_ch[i]!='\0';i++){
  array_ch[i]=array_ch[i]+32;
  printf("%c",array_ch[i]);
}

输出:

abcde`H��A���/��u�$(!

如果我在另一个循环中打印它,那就ok:

输入:

char array_ch[]={'A','B','C','D','E'};
int i=0;
for(i;array_ch[i]!='\0';i++){
  array_ch[i]=array_ch[i]+32;
}


for(i=0;array_ch[i]!='\0';i++){
  printf("%c",array_ch[i]);
}
printf("\n");

输出:

abcde

2 个答案:

答案 0 :(得分:5)

您有未定义的行为。问题是你的循环: 它寻找\ 0并且没有。因此,运气好的话,你会发现问题更糟糕,你认为运行正常,因为它看起来好像没问题,但这只是一个等待发生的问题。

所以写:char array_ch [] = {'A','B','C','D','E','\ 0'};你应该没事的

此致

答案 1 :(得分:4)

该数组不会以空值终止,如果您打算使用该循环,则应自行插入终结符

char array_ch[] = { 'A', 'B', 'C', 'D', 'E', '\0' };