2014-10-01 69 views
3

我的格式为给定长度的所有字符串列表Ç - 获取字符串从一个int

如长度3

000 
100 
200 
. 
. 
900 
A00 
B00 
. 
. 
Z00 
a00 
b00 
. 
. 
z00 
010 
. 
. 
. 
zzz 

我想写valueof(int pos, int len)它接受一个位置INT作为参数,并在该位置(例如valueof(1,3)打印000valueof(109,3)打印k10

打印字符串这是我的尝试,它是不工作:

void valueof(int pos,int len) 
{ 

    int i=0; 
    char arry[62] = {'0','1','2','3','4','5','6','7','8','9', 
     'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 
     'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 
    char * string = malloc(sizeof(char)*(len+1)); 
    for(i=0; i<len; i++) 
    { 
     string[i]='0'; 
    } 
    string[len]='\0'; 
    i=0; 
    while(pos >= 62) 
    { 
     string[i]=arry[(pos%62)-1]; 
     i++; 
     pos/=62; 
    } 
    string[i]=arry[pos]; 

    printf("%s\n",string); 
} 
+2

它是如何不工作?例如,如果我们调用'valueOf(109,3)'当前报告的内容? – 2014-10-01 17:02:40

+0

阅读关于[snprintf(3)](http://man7.org/linux/man-pages/man3/snprintf.3.html)&[strdup(3)](http://man7.org/linux/ man-pages/man3/strdup.3.html)或许(在Linux上)[asprintf(3)](http://man7.org/linux/man-pages/man3/asprintf.3.html) – 2014-10-01 17:11:14

+1

@BasileStarynkevitch :我不确定这有帮助。 – 2014-10-01 17:12:05

回答

5

因此,pos % 62返回[0, 61]之间的数字。所以当你做(pos%62)-1时,你会得到一个介于[-1, 60]之间的数字。你可能不想要的。

你或许应该改写这一行:

string[i]=arry[(pos%62)-1]; 

为:

string[i] = arry[pos % 62]; 
2

这里有一个测试工具。我会添加一些边界检查输入,否则你可以溢出数组。

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

    void valueof(int pos,int len) 
... 

    int main (int argc, char **argv) { 
    valueof(atoi(argv[1]), atoi(argv[2])); 
    } 

要编译的gcc -o vo.c VO

./vo 1 3 
000 
./vo 109 3 
k10