1.道路だけで済プログラミングの問題:
5以下の指定された整数、
請求項に
数桁によって決定される1、
2つの出力の各桁
3桁の逆の順序で出力が、例えば、321の元の数、123を出力します
サンプル入力
12345
出力例
。5
。1 5 4 3 2
54321
2.次のように私は、コードを提出は、次のとおりです。
#include <stdio.h>
#include <string.h>
int main()
{
int len; //num输入,len存储数组长度
int num;
int i;
char s[5]; //最大存储5个字符
scanf("%d",&num);
sprintf(s,"%d",num); //转换为数字字符串
len = strlen(s);
printf("%d\n",len);
for ( i=0;i < len;i++){
printf("%c ",s[i]);
}
printf("\n");
for ( i= len-1;i>=0;i--){
printf("%c",s[i]);
}
printf("\n");
return 0;
}
配列境界、実行時エラーに私を促した私はすべてが正常であるコンパイルにはgccを使用しますが、サイトには、プログラムにアップロードされます。。
3.根本的な原因
1.そこ\ 0を終了する文字の配列があるので、格納された値が複数である必要があり、コードは次のように記述する必要があります。
#include <stdio.h>
#include <string.h>
int main()
{
int len; //num输入,len存储数组长度
int num;
int i;
char s[6]; //最大存储5个有效字符,注意字符数组已\0结尾
scanf("%d",&num);
sprintf(s,"%d",num); //转换为数字字符串
len = strlen(s);
printf("%d\n",len);
for ( i=0;i < len;i++){
printf("%c ",s[i]);
}
printf("\n");
for ( i= len-1;i>=0;i--){
printf("%c",s[i]);
}
printf("\n");
return 0;
}
2. gccがあるため与えられていない理由:
GCC-4.3.2配列境界の最適化後、例えば:配列TMP [100]、国境を越えた動作が発生した場合、アクセス、すなわち、S [6]へのアクセスは、最終的に[Sを制限する、アレイの境界に限定される定義5]、クロスボーダーは本当に起こるのではないでしょう。
gccの-v現在のバージョンを確認するには:
だから、書き込みコードは、GCCの高いバージョンは文句を言わないが、標準化されなければならないが、GCC環境の低いバージョンへの移行の場合には大きな問題となります。
参考リンク:https://blog.51cto.com/lion3875/530264