0

我有一个数组,我想在其中存储像 1203 这样的值

   char* arr= new char[10];
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 0;
    arr[3] = 3;

但是在存储 0 之后,我无法看到任何进一步的数据 bcs,它会将其视为数据的结尾。有什么办法可以管理这个吗?

4

8 回答 8

2

您将整数存储在字符数组中。尝试这样的事情:

char* arr= new char[10];
arr[0] = '1';
arr[1] = '2';
arr[2] = '0';
arr[3] = '3';
于 2012-08-06T09:15:20.967 回答
2

你的语法是 C++。但是,不管这一点,你可以snprintf用来存储你的数据:

snprintf(arr, 10, "%d", 1203);
于 2012-08-06T09:18:51.030 回答
1

你说你“无法看到任何进一步的数据”,但你没有描述你正在做什么来查看数据。您是否使用 printf 和 %s 格式打印它?您是否在调试器中显示它?

当您对 char 数据使用字符串操作时,零通常表示字符串的结尾。将 %s 与 printf 一起使用或使用 strcpy 或 strlen 时,这是正确的。但是,可以对 char 数组进行数值处理。之后arr[3] = 3;,3存储在arr[3]中,看一眼就知道了。

您可以使用带有 printf 的 %d 格式将 char 数据打印为十进制数字。%d 打印一个数字,因此您需要传递一个数字来打印,例如 arr[0]、arr[3] 或循环中的 arr[i]。这与 %s 不同,后者将指针(例如数组,它变成指向第一个元素的指针)传递给 printf,它会打印多个字符。

如果您正在使用调试器查看 char 数组,您可能会单独查看 arr[3] 以查看它包含 3。您的调试器可能有办法将 char 数组显示为十进制数字序列,而不是作为一个字符串。

于 2012-08-06T09:40:06.237 回答
1

0表示char*.

因为char*是 C 中的字符串,它的存在是为了用作 char 数组而不是integer数组。与字符串相关的所有函数都旨在与字符​​串一起使用。

您可以使用int*来存储integers。

您可以像这样手动执行二进制操作:

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_torint代替char.

(char*)((int)value)不好,因为您将转换intchar*,但char*是变量temp而不是要存储的数字temp

如果指针对您来说是一个新事物,那么做一些指针练习会很有帮助:操作数组、列表、...

于 2012-08-06T10:52:47.573 回答
0

我认为你应该把它写成:

char* arr= new char[10];
arr[0] = '1';
arr[1] = '2';
arr[2] = '0';
arr[3] = '3';

这样您就不需要使用表示终止的零值,如 Aamir 所说

于 2012-08-06T09:17:08.070 回答
0

大多数调试器工具会注意到它正在显示一个字符数组。from of data 在 C 中通常用作以空字符结尾的字符串的存储。

一个以空结尾的字符串,如果命名不够充分,是一堆字符(可打印或不可打印),以零结尾。该标记告诉 printf 什么时候停止打印。

它还告诉调试器使用的函数停止打印。为避免这种情况,您应该告诉调试器“这不是字符串,傻瓜!” 或者干脆重新声明为short。

你很想成为一个初学者,所以接受这个建议:忘记整数,使用短或长。int 大小取决于机器,稍后它会让你陷入“我认为它是 Xbits”的麻烦。

于 2012-08-06T09:22:32.310 回答
0

您可以在 Unix 平台上使用 write:

man 2 write;

此功能允许您指定要打印的元素的长度。

但可以肯定的是,snprintf它是一种便携式解决方案(因为size_t尺寸允许您这样做)。

这样做要小心,以免出现段错误。

注意:您可以将 char 设置为 or 之类的值0255或者如果它是 a 则使用负值signed char...您可以将其设置为0、 或48,没有区别。

于 2012-08-06T09:34:51.097 回答
0

字符* arr=新字符[10];

正如您已经定义了字符数组,当您将 0 分配给任何数组成员并传递整个数组或打印数组时,将其作为数据结束的原因是因为 0 实际上是 NULL 并且每个字符串都以 NULL 终止。因此,如果您真的想分配字符 0 的值,那么您可以分配 0 或 '0' 的 ascii 值。

希望能帮助到你

于 2012-08-06T10:06:00.793 回答