我正在尝试在char
数组中存储一个整数。我怎样才能做到这一点?这是我的方法(通过将int
强制转换为char
),但它不起作用。我错过了什么?
#include <stdio.h>
int main(int argc, char** argv)
{
char cArray[10] = {};
// Store a character in the char array
cArray[5] = 'c';
printf("%c\n", cArray[5]);
// Store an integer in the char array
cArray[6] = (char) 0; // WHY DOES THIS NOT WORK???
printf("%c\n", cArray[6]);
}
答案 0 :(得分:12)
让我们从基础开始。
对于x86架构(假设您使用它),char
变量存储在1个字节中,int
变量存储在4个字节中。
将random
整数值存储在char变量中是不可能的,除非您有一些压缩模式并且知道程序中不会出现某些整数值(不随机!)。没有例外。
在您的情况下,您希望将整数存储在char数组中。有四种选择:
1.如果你想在这个char数组中存储一个随机整数,那么你应该得到指向你想要存储整数的索引的指针并将其转换为整数指针并像这样使用它。
char mychars[10];
int * intlocation = (int*)(&mychar[5]);
*intlocation = 3632; // stores 3632
请注意,这将从您指定的索引开始写入4个字节(数组中的4个char位置)。你应该总是检查你是不是没有数组。你也应该做同样的转换,以便在需要时检索它。
2.如果您的值在[0,255]或[-128,127]之间,您可以安全地将整数存储在char中,因为这些范围可以使用一个字节来表示。请注意,签名或未签名的char是依赖于实现的。 Check this out!
mychars[5] = 54;
3.如果您的整数只是一个数字,您可以使用数字的字符表示。
mychars[5] = your_digit + 48; // 48 is the ascii code for '0'
4.如果要存储整数的字符串表示形式,则应使用itoa()
并将结果字符串的每个字符串逐个写入数组。在这种情况下,您应该始终检查您是否没有使用数组。
答案 1 :(得分:7)
cArray[6] = (char) 0; // WHY DOES THIS NOT WORK???
printf("%c\n", cArray[6]);
此代码尝试使用编码0
打印字符;假设ASCII,将不会显示任何内容,因为没有与该代码关联的可打印字符。
如果您打算存储字符 '0'
的ASCII码并打印它,那么您需要编写
cArray[6] = 48; // same as writing cArray[6] = '0' (ASCII)
printf( "%c\n", cArray[6] );
这会将0
打印到您的控制台。
另一方面,如果要将任何任意任意整数值 1 存储到cArray[6]
并显示该值 ,那么你需要使用%d
转换说明符:
cArray[6];
printf( "%d\n", cArray[6] );
<小时/> 1。也就是说,任何适合
char
范围的整数
答案 2 :(得分:1)
通常,计算机完全按照您的说法进行操作。指令DWIM
(做我的意思)尚未发明。
cArray[6] = (char) 0; // WHY DOES THIS NOT WORK???
设置索引位置6,但
printf("%c\n", cArray[5]);
打印索引位置5.
答案 3 :(得分:0)
替换
cArray[6] = (char) 0; // WHY DOES THIS NOT WORK???
printf("%c\n", cArray[5]);
通过
cArray[6] = (char)51;
printf("%c\n", cArray[6]);
应显示'3'
我认为你会理解你的错误... 0因为int不代表可打印字符'0',但是NULL终止字符串
51 as int表示字符'3'
答案 4 :(得分:0)
您可以使用itoa(0,&cArry[6],10)
。
答案 5 :(得分:0)
使用正确所需的格式说明符。
cArray[6] = (char) 0;
将整数0存储到数组元素cArray[6]
中。它的printf()
正在愚弄OP,认为它不起作用。
使用%c
表示OP希望编码为0的字符(通常不可见)。使用%d打印cArray[6]
的整数值。
printf("%d\n", cArray[6]);
答案 6 :(得分:0)
您可以将ASCII值0添加到要将数字存储到字符数组中的值。 例如,如果要将0,1,...,9存储到字符数组A [10]中,可以使用以下代码。
for(j = 0; j<k; j++)
{
A[j] = j + '0'; // Same effect if you use A[j] = j + 0x30
}
仅当您要存储的整数小于10时才有效。否则您将必须使用模运算符和存储来提取数字。