我正在做一個學校項目,這個問題出現了。順便說一句,我不能使用庫。如何使用malloc將int變量轉換爲C中的char *數組?
如何將int變量轉換爲char數組? 我都試過,但它沒有工作,嘗試了很多其他的東西,甚至是魔法不工作...
char *r = malloc(sizeof(char*));
int i = 1;
r[counter++] = (char) i;
有人能幫助我嗎? 謝謝你的時間。
我正在做一個學校項目,這個問題出現了。順便說一句,我不能使用庫。如何使用malloc將int變量轉換爲C中的char *數組?
如何將int變量轉換爲char數組? 我都試過,但它沒有工作,嘗試了很多其他的東西,甚至是魔法不工作...
char *r = malloc(sizeof(char*));
int i = 1;
r[counter++] = (char) i;
有人能幫助我嗎? 謝謝你的時間。
在你的代碼中,你應該分配給char
大小而不是char *
。請使用此代碼段嘗試
char *r = malloc(sizeof(char) * N); // Modified here
int i = 1;
r[counter++] = i & 0xff; // To store only the lower 8 bits.
你也可以試試這個:
char *r = malloc(sizeof(char));
char *s = (char*)&i;
r[counter++] = s[0];
這是進行的其他有趣的方式,它可以讓你與訪問完整的INT: s[0]
,s[1]
, etc ...
如果您不能使用該庫,則不能使用malloc
。
但是這將工作:
int i = 0;
char *p = (char *)&i;
p[0] = 'H';
p[1] = 'i';
p[2] = '!';
p[3] = '\0';
printf("%s\n", p);
假設你int
爲32位或更多(和你的char
爲8)。
然後,它遵循的是如果您有:
int i[100];
你可以把這個作爲一個char
數組大小等於sizeof (i)
。即
int i[100];
int sz = sizeof(i); // probably 400
char *p = (char *)i; // p[0] to p[sz - 1] is valid.
你介意損失精度嗎? char通常是8位,而int通常更多。任何超過255的int值都將被轉換爲255的模數 - 除非你想將int轉換爲保存int所需的字符數。
您的標題好像沒有說,但迄今沒有答案給予。
如果是這樣,您需要聲明一個字符數組sizeof(int)/sizeof(char)
並循環多次,將i >> 8
移動到r[looop_var]
。除非你的老師告訴你這樣做,否則根本不需要malloc。在這種情況下,不要忘記處理malloc失敗。
讓我們這樣說(我編碼這種W/O編譯它,所以要小心)
int numChars = sizeof(int)/sizeof(char);
char charArry[numChard]; // or malloc() later, if you must (& check result)
int convertMe = 0x12345678;
int loopVar;
for (loopVar = 0; loopvar < numChars)
{
charArry[loopVar ] = convertMe ;
convertMe = convertMe >> 8;
}
您可以使用union
代替。假設sizeof int == 4
,
typedef union {
int i;
char[4] cs;
} int_char;
int_char int_char_pun;
int_char_pun.i = 4;
for (int i = 0; i < 4; i++) {
putchar(int_char_pun.cs[i]);
}
要小心; int_char.cs通常不會是以空字符結尾的字符串,或者它可能是,但長度爲< 4。
,如果你不希望包括數學函數庫:
unsigned long pow10(int n);
void main(){
char test[6] = {0};
unsigned int testint = 2410;
char conversion_started = 0;
int i=0,j=0;float k=0;
for(i=sizeof(test);i>-1;i--){
k=testint/pow10(i);
if(k<1 && conversion_started==0) continue;
if(k >= 0 && k < 10){
test[j++]=k+0x30;
testint = testint - (k * pow10(i));
conversion_started=1;
}
}
test[j]=0x00;
printf("%s",test);
}
unsigned long pow10(int n){
long r = 1;
int q = 0;
if(n==0) return 1;
if(n>0){
for(q=0;q<n;q++) r = r * 10;
return r;
}
}
注:我沒那麼在意字符數組的長度,這樣你就可以更好地做出明智的選擇吧。
我想我在這裏誤解了一些東西..從來不知道。 – 2013-03-24 01:48:35
嗯...有什麼不妥低於
char *r = malloc(sizeof(char) * ARR_SIZE);
int i = 1;
sprintf(r,"%d",i);
printf("int %d converted int %s",i,r);
代碼將現在爲你工作
你們是不是將數字轉換爲字符串?你的問題還不清楚。 – danfuzz 2013-03-24 00:57:44
有些東西很奇怪,不清楚:你爲什麼要做'char * r = malloc(sizeof(char *));'而不是'char r;'?通常人們在需要一個char(字符串)數組時,會這樣做,而不是一個char。 – Jean 2013-03-24 01:03:37
請注意。 char的大小和int的大小可以在不同的系統上有所不同。 – Mawg 2013-03-24 04:24:13