0

恥ずかしいかもしれませんが、どうぞ!次のコード (以下に示す) があり、int を取り、それを char 文字列に変換することを想定しています。(私は itoa() と snprintf について知っていますが、私はそれをこのように動作させたくありません。) 印刷しようとするまではすべて正常に動作しているように見えますが、inttochar 文字列には何も表示されません。それはおそらく私が見落としたばかげたことです...次の結果が得られます:

CHAR1: 4334321
CHAR2: 1234334
CHAR3: 

コードは次のとおりです。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(){
int tester = 1234334;   //Test value
char temp[10];          //Temporary string array.       
char inttochar[10];         
int t = 0;

//Reads int to array.
while(tester != 0){
    temp[t] = (tester % 10) + '0';
    tester /= 10;
    t++;    
}
temp[t] = '\0';
t = 0;
printf("CHAR1: %s\nCHAR2: ",temp);


//Reverses the string.
for(int j=strlen(temp); j>=0;j--){
    inttochar[t] = temp[j];
    printf("%c",inttochar[t]);
    t++;
}
inttochar[t] = '\0';
t = 0;
printf("\nCHAR3: %s\n",inttochar);
} 
4

3 に答える 3

1

for ループを使用した逆反復は、次のように簡単です。

for(int j=strlen(temp); j--; ){
    inttochar[t] = temp[j];
    printf("%c",inttochar[t]);
    t++;
}

テストとデクリメントが 1 つになっていることに注意してください。

これは一般に逆反復に適用できます。

于 2012-05-12T13:40:48.010 に答える
1
t=0;
for(int j=strlen(temp); j>=0;j--){
    inttochar[t] = temp[j];
    t++;
    }
inttochar[t] = '\0';

1つずれています。このループを記述する "より良い" (j に署名する必要がない) 方法は、次のようになります。

t=0; 
for(size_t j=strlen(temp); j-- > 0;){
    inttochar[t++] = temp[j];
    }
inttochar[t] = '\0';
于 2012-05-12T13:33:08.183 に答える
1

から開始する必要があります。それ以外の場合は、 ( にあるもの) をj=strlen(temp)-1に割り当てます。\0temp[strlen(temp)]inttochar[0]

于 2012-05-12T13:33:17.040 に答える