爪哇:
byte[] arr1=new byte[]{0x01};
String aa = "helloo";
short[] s1 = new short[1]; // **
s1[0] = 246; // **
Object[] obj = new Object[]{s1,arr1,aa}
C:
signed char a1[] = {0x01};
char *str = "helloo";
short int st1[] = {246}; // **
char* c [] = {st1,str1,c2};
short int st1[] = {246}
是否正确?我收到了这个错误:
“illegal implicit conversion from 'short *' to 'char *'
”。
如何为char分配短片?
答案 0 :(得分:3)
char* c []
是一个指针数组,而不是一个字符数组。
使用类似
的内容short st1[] = { 246 };
char* str = "helloo";
char c [] = {st1[0], str[0], str[1], str[2], str[3], str[4], str[5]};
str[i]
获取单个字符,因为'char * str'指向数组的第一个元素。
如果您需要一个字符串数组,那么将其设为
char tmp[1024];
// itoa is the conversion of st1[0] to string
char* c[] = { itoa(st1[0], tmp, 10), str };
答案 1 :(得分:1)
将st1
投射到char*
。即:
char* c [] = {(char*)st1,str1,c2};
请注意,如果要获取正确的数据,则在访问指向的元素时,必须将指针强制转换回short*
。
答案 2 :(得分:1)
C ++没有基础对象类型。您必须将所有字符串转换为特定类型。
std::string wtf[]= { std::string(a1, a1+ 1), std::string(st1, st1+ 1), std::string(str) }; // don't forget to #include <string>
答案 3 :(得分:1)
在C或C ++中,没有适用于所有类型的公共基类(如Java Object
),您可以使用的最好的是void* c[]=...;
(void *代表无类型指针,因此它可以保存任何内容)或明确地转换为所需的类型(但是通过char指针访问短路时未定义)。
答案 4 :(得分:0)
虽然高度不推荐,但c中las线的粗略等价是:
void* c [] = {st1,str1,c2};