如何在C中将零作为数组数据存储

时间:2012-08-06 09:14:01

标签: c++

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

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

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

8 个答案:

答案 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_tint代替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: 您可以使用0255等值设置字符,如果是signed char则设置为负值... 您可以使用048进行设置,但没有差异。

答案 7 :(得分:0)

char * arr = new char [10];

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

希望有所帮助