2012-05-12 2 views
0

이것은 아마 당혹 스러울 것입니다,하지만 여기에 우리가 간다! 다음 코드 (아래 참조)가 있으며 int를 사용하여 char 문자열로 변환한다고 가정합니다. (나는 itoa()와 snprintf에 대해 알고 있지만, 이렇게 작동하게하지는 않을 것입니다.) 인쇄를 시도 할 때까지 모든 것이 잘 작동하는 것처럼 보입니다. inttochar 문자열에는 아무 것도 표시되지 않습니다. 그것은 아마 내가 간과 한 어리석은 단지 뭔가 ... 나는 다음과 같은 결과를 얻을 :인쇄 문자열이 아닙니다. char 배열

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); 
} 
+2

'for (int j = strlen (temp); j> = 0; j -) {'이것은 하나씩 꺼져 있습니다. – wildplasser

답변

1

, 그렇지 않으면 당신은 inttochar[0]에 (temp[strlen(temp)]에 무엇 인) \0를 할당합니다. a를위한 루프 등이 용이하여

+0

간단하지만 훌륭합니다. 고맙습니다! – StianL

1
t=0; 
for(int j=strlen(temp); j>=0;j--){ 
    inttochar[t] = temp[j]; 
    t++; 
    } 
inttochar[t] = '\0'; 

하나가 꺼져 있습니다. 이 루프를 작성하는 A "더 나은"(서명이 J 필요하지 않습니다) 방법은 다음과 같습니다 당신은 j=strlen(temp)-1에서 시작해야

t=0; 
for(size_t j=strlen(temp); j-- > 0;){ 
    inttochar[t++] = temp[j]; 
    } 
inttochar[t] = '\0'; 
+0

흠, 뭔가 새로운 것을 알지 못했습니다. 거기에 t ++를 넣을 수 있다는 것을 몰랐습니다! 고맙습니다! – StianL

1

역방향 반복 :

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

참고 하나의 테스트 및 감소.

이것은 일반적으로 역순 반복에 적용 할 수 있습니다.