Ç - 获取字符串从一个int
问题描述:
我的格式为给定长度的所有字符串列表Ç - 获取字符串从一个int
如长度3
000
100
200
.
.
900
A00
B00
.
.
Z00
a00
b00
.
.
z00
010
.
.
.
zzz
我想写valueof(int pos, int len)
它接受一个位置INT作为参数,并在该位置(例如valueof(1,3)
打印000
和valueof(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);
}
答
因此,pos % 62
返回[0, 61]
之间的数字。所以当你做(pos%62)-1
时,你会得到一个介于[-1, 60]
之间的数字。你可能不想要的。
你或许应该改写这一行:
string[i]=arry[(pos%62)-1];
为:
string[i] = arry[pos % 62];
答
这里有一个测试工具。我会添加一些边界检查输入,否则你可以溢出数组。
#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
它是如何不工作?例如,如果我们调用'valueOf(109,3)'当前报告的内容? – 2014-10-01 17:02:40
阅读关于[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
@BasileStarynkevitch :我不确定这有帮助。 – 2014-10-01 17:12:05