我有数组,其中我想存储像这样的值1203
char* arr= new char[10];
arr[0] = 1;
arr[1] = 2;
arr[2] = 0;
arr[3] = 3;
但是在存储0之后,我无法看到任何进一步的数据bcs,它会将其视为数据的结尾。有没有办法管理这个?
答案 0 :(得分:2)
您将整数存储在字符数组中。尝试这样的事情:
char* arr= new char[10];
arr[0] = '1';
arr[1] = '2';
arr[2] = '0';
arr[3] = '3';
答案 1 :(得分:2)
你的语法是用C ++编写的。但是,无视这一点,您可以使用snprintf
来存储您的数据:
snprintf(arr, 10, "%d", 1203);
答案 2 :(得分:1)
您说您“无法再查看任何其他数据”,但您没有描述您在查看数据时所做的工作。你用printf和%s格式打印吗?你在调试器中显示它吗?
对char数据使用字符串操作时,零通常表示字符串的结尾。将%s与printf一起使用或使用strcpy或strlen时都是如此。但是,可以用数字方式处理char数组。在arr[3] = 3;
之后,3存储在arr [3]中,这只是看到它的问题。
您可以使用%f格式和printf将字符数据打印为十进制数字。 %d打印一个数字,因此您需要传递一个数字进行打印,例如arr [0],arr [3],或者在循环中传递arr [i]。这与%s不同,在%s中,您将指针(例如数组,它成为指向第一个元素的指针)传递给printf,并打印多个字符。
如果您正在使用调试器查看char数组,您可以单独查看arr [3]以查看它包含3.您的调试器可能有办法将char数组显示为一个十进制数字序列而不是作为一个字符串。
答案 3 :(得分:1)
0
表示char*
中的字符串结尾。
因为char*
是C中的字符串,它存在用作char数组而不是integer
数组。与字符串相关的所有函数都应与字符串一起使用。
您可以使用int*
存储integer
s。
您可以像这样手动执行二进制操作:
int value = 1245;
char* temp = new char[4];
temp[0] = (char)(value >> 24);
temp[1] = (char)(value >> 16);
temp[2] = (char)(value >> 8);
temp[3] = (char)value;
return temp;
您可以使用uint8_t
或int
代替char
。
(char*)((int)value)
不好,因为您将int
转换为char*
,但char*
是变量temp
而不是要存储的数字temp
{{1}}。
如果指针对你来说是新事物,那么在指针中做一些练习会很有帮助:操作数组,列表......
答案 4 :(得分:0)
我认为你应该把它写成:
char* arr= new char[10];
arr[0] = '1';
arr[1] = '2';
arr[2] = '0';
arr[3] = '3';
这样您就不需要使用零值来表示Aamir所说的终止
答案 5 :(得分:0)
您的调试工具与大多数人一样,会注意到它正在显示一个char数组。数据通常在C中用作存在空终止字符串的存储。
以null结尾的字符串,如果命名的内容不够透明,则是一堆字符(可打印或不打印),以零结束。该标记告诉printf和类似的什么时候停止打印。
它还告诉调试器使用的函数停止打印。为了避免这种情况,您应该告诉调试器“这不是字符串,傻瓜!”或者只是简单地重新宣布。
你接缝是一个首发,所以采取这个建议:忘记整数,使用短或长。 int大小取决于机器,它会让你进入“我以后觉得它是Xbits”的麻烦。
答案 6 :(得分:0)
你可以在Unix平台上使用write:
man 2 write;
此功能允许您指定要打印的元素的长度。
但可以肯定的是,snprintf
是一种可移植的解决方案(因为size_t
大小允许您这样做)。
这样做要小心,以免发生段错误。
NB:
您可以使用0
或255
等值设置字符,如果是signed char
则设置为负值...
您可以使用0
或48
进行设置,但没有差异。
答案 7 :(得分:0)
char * arr = new char [10];
因为已经定义了字符数组,当您为任何数组成员分配0并传递整个数组或打印数组时,它将其作为数据结束的原因因为0实际上是NULL而且每个字符串都以NULL结尾。因此,如果您真的想要指定字符0的值,那么您可以指定ascii值为0或'0'。
希望有所帮助