我试图在char数组中存储一个整数.我怎样才能做到这一点?这是我的方法(通过将其转换int为a 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]);
}
Run Code Online (Sandbox Code Playgroud)
Seç*_*şçı 13
让我们从基础开始.
对于x86架构(假设您使用它),char变量存储在1个字节中,int变量存储在4个字节中.
将一个random整数值存储在char变量中是不可能的,除非你有一些压缩模式,并且知道程序中不会出现某些整数值(不随机!).没有例外.
在您的情况下,您希望将整数存储在char数组中.有四种选择:
1.如果要在此char数组中存储随机整数,则应获取指向要存储整数的索引的指针,并将其转换为整数指针并使用它.
char mychars[10];
int * intlocation = (int*)(&mychar[5]);
*intlocation = 3632; // stores 3632
Run Code Online (Sandbox Code Playgroud)
请注意,这将从您指定的索引开始写入4个字节(数组中的4个char位置).你应该总是检查你是不是没有数组.你也应该做同样的转换,以便在需要时检索值.
2.如果您的值介于[0,255]或[-128,127]之间,则可以安全地将整数存储在char中,因为这些范围可以使用一个字节来表示.请注意,签名或未签名的char是依赖于实现的.看一下这个!
mychars[5] = 54;
Run Code Online (Sandbox Code Playgroud)
3.如果您的整数只是一个数字,您可以使用数字的字符表示.
mychars[5] = your_digit + 48; // 48 is the ascii code for '0'
Run Code Online (Sandbox Code Playgroud)
4.如果要存储整数的字符串表示形式,则应该itoa()逐个使用结果字符串的每个字符串并将其写入数组.在这种情况下,您应该始终检查您是否没有退出阵列.
cArray[6] = (char) 0; // WHY DOES THIS NOT WORK???
printf("%c\n", cArray[6]);
Run Code Online (Sandbox Code Playgroud)
此代码尝试使用编码打印字符0 ; 假设ASCII,将不会显示任何内容,因为没有与该代码关联的可打印字符.
如果要存储的ASCII码的字符 '0',并打印出来,然后你需要写
cArray[6] = 48; // same as writing cArray[6] = '0' (ASCII)
printf( "%c\n", cArray[6] );
Run Code Online (Sandbox Code Playgroud)
这将打印0到您的控制台.
如果,另一方面,你要存储任何任意整数值1到cArray[6]并显示该值,则需要使用%d转换符:
cArray[6];
printf( "%d\n", cArray[6] );
Run Code Online (Sandbox Code Playgroud)
char,反正