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

Mor*_*ham 3 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]);
}
Run Code Online (Sandbox Code Playgroud)

输出:

abcde`H??A???/??u?$(!
Run Code Online (Sandbox Code Playgroud)

如果我在另一个循环中打印它可以:

输入:

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");
Run Code Online (Sandbox Code Playgroud)

输出:

abcde
Run Code Online (Sandbox Code Playgroud)

Fri*_*ich 5

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

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

问候

  • 我不能和我不必.因为我说的一切都是错的.未定义意味着一切都会发生,如果碰巧它似乎有效.每个人的意思都很好.但这并没有使未定义的行为消失.作为程序员,你只需要留下一些东西.不要编写未定义行为的程序.它迟早会追捕你,也许是几年之后.查看热门程序中的各种安全问题..... (2认同)