我有一个数组,我想在其中存储像 1203 这样的值
char* arr= new char[10];
arr[0] = 1;
arr[1] = 2;
arr[2] = 0;
arr[3] = 3;
但是在存储 0 之后,我无法看到任何进一步的数据 bcs,它会将其视为数据的结尾。有什么办法可以管理这个吗?
我有一个数组,我想在其中存储像 1203 这样的值
char* arr= new char[10];
arr[0] = 1;
arr[1] = 2;
arr[2] = 0;
arr[3] = 3;
但是在存储 0 之后,我无法看到任何进一步的数据 bcs,它会将其视为数据的结尾。有什么办法可以管理这个吗?
您将整数存储在字符数组中。尝试这样的事情:
char* arr= new char[10];
arr[0] = '1';
arr[1] = '2';
arr[2] = '0';
arr[3] = '3';
你的语法是 C++。但是,不管这一点,你可以snprintf
用来存储你的数据:
snprintf(arr, 10, "%d", 1203);
你说你“无法看到任何进一步的数据”,但你没有描述你正在做什么来查看数据。您是否使用 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 数组显示为十进制数字序列,而不是作为一个字符串。
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
orint
代替char
.
(char*)((int)value)
不好,因为您将转换int
为char*
,但char*
是变量temp
而不是要存储的数字temp
。
如果指针对您来说是一个新事物,那么做一些指针练习会很有帮助:操作数组、列表、...
我认为你应该把它写成:
char* arr= new char[10];
arr[0] = '1';
arr[1] = '2';
arr[2] = '0';
arr[3] = '3';
这样您就不需要使用表示终止的零值,如 Aamir 所说
大多数调试器工具会注意到它正在显示一个字符数组。from of data 在 C 中通常用作以空字符结尾的字符串的存储。
一个以空结尾的字符串,如果命名不够充分,是一堆字符(可打印或不可打印),以零结尾。该标记告诉 printf 什么时候停止打印。
它还告诉调试器使用的函数停止打印。为避免这种情况,您应该告诉调试器“这不是字符串,傻瓜!” 或者干脆重新声明为short。
你很想成为一个初学者,所以接受这个建议:忘记整数,使用短或长。int 大小取决于机器,稍后它会让你陷入“我认为它是 Xbits”的麻烦。
您可以在 Unix 平台上使用 write:
man 2 write;
此功能允许您指定要打印的元素的长度。
但可以肯定的是,snprintf
它是一种便携式解决方案(因为size_t
尺寸允许您这样做)。
这样做要小心,以免出现段错误。
注意:您可以将 char 设置为 or 之类的值0
,255
或者如果它是 a 则使用负值signed char
...您可以将其设置为0
、 或48
,没有区别。
字符* arr=新字符[10];
正如您已经定义了字符数组,当您将 0 分配给任何数组成员并传递整个数组或打印数组时,将其作为数据结束的原因是因为 0 实际上是 NULL 并且每个字符串都以 NULL 终止。因此,如果您真的想分配字符 0 的值,那么您可以分配 0 或 '0' 的 ascii 值。
希望能帮助到你