不会打印字符串。 char数组

时间:2012-05-12 13:27:17

标签: c avr

这可能会令人尴尬,但我们走了! 我有以下代码(如下所示),并假设采用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);
} 

3 个答案:

答案 0 :(得分:1)

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

一个人关闭。写一个“更好”(不需要j签名)的方法是:

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

答案 1 :(得分:1)

您应该从j=strlen(temp)-1开始,否则您将\0temp[strlen(temp)]中的内容)指定给inttochar[0]

答案 2 :(得分:1)

使用for循环进行反向迭代更容易:

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

注意一次测试和减少。

这通常适用于反向迭代。