C 使用阵列的Win32 API

C 使用阵列的Win32 API,c,arrays,C,Arrays,我是程序员的初学者。我不明白为什么不能将一些脚本从数组复制到另一个数组 char array1[11]; char array2[2]; array1 = {'255 105 85'}; array2[0] = array1[0]; array2[1] = array1[1]; array2[2] = array1[2]; MessageBox(hwnd,array2,"mes",NULL); 我得到的是“5”而不是“255”。 我使用GCC编译器的代码::blocks。该项目是基于win3

我是程序员的初学者。我不明白为什么不能将一些脚本从数组复制到另一个数组

char array1[11];
char array2[2];
array1 = {'255 105 85'};
array2[0] = array1[0];
array2[1] = array1[1];
array2[2] = array1[2];

MessageBox(hwnd,array2,"mes",NULL);
我得到的是“5”而不是“255”。 我使用GCC编译器的代码::blocks。该项目是基于win32 frame创建的。
有人知道问题的原因吗?

数组1应该这样声明:

char array1[11] = {255, 105, 85};
   char *array1[3] = {
         "255",
         "105",
         "85"
   };

   char *array2[3];

   array2[0] = array1[0];
   array2[1] = array1[1];
   array2[2] = array1[2];
chararray1[]={0x255、0x105、0x85}

单引号用于ascii中的单字符,如
'a'
'6'
'!'


此外,array2的长度为2,但您正在为第三个值赋值(
array2[2]
)。这可能是一个错误。

数组1应该这样声明:

char array1[11] = {255, 105, 85};
   char *array1[3] = {
         "255",
         "105",
         "85"
   };

   char *array2[3];

   array2[0] = array1[0];
   array2[1] = array1[1];
   array2[2] = array1[2];
chararray1[]={0x255、0x105、0x85}

单引号用于ascii中的单字符,如
'a'
'6'
'!'


此外,array2的长度为2,但您正在为第三个值赋值(
array2[2]
)。这可能是一个错误。

C中不允许以下构造:

array1 = {'255 105 85'};
<>你可以考虑使用这样的静态数组初始化:

char array1[11] = {255, 105, 85};
   char *array1[3] = {
         "255",
         "105",
         "85"
   };

   char *array2[3];

   array2[0] = array1[0];
   array2[1] = array1[1];
   array2[2] = array1[2];
这将使用3个指定的值填充数组1,并将所有其他元素设置为0(即,以索引3开始,以索引10结束的元素)

很奇怪,为什么编译器没有在您的案例中发出语法错误

更新: 还请注意,当您有这样一个数组1[2]表达式时,您正在处理单个字符。如果要对字符串进行操作(即,指定的数字有3个单独的字符串),则必须声明如下内容:

char array1[11] = {255, 105, 85};
   char *array1[3] = {
         "255",
         "105",
         "85"
   };

   char *array2[3];

   array2[0] = array1[0];
   array2[1] = array1[1];
   array2[2] = array1[2];

因此,您将拥有一个字符串数组。array1的每个条目都将包含字符串“255”所在内存的指针(地址)(请注意,“255”是一个包含4个字符的数组:“2”、“5”、“5”、“0”)。

C中不允许以下构造:

array1 = {'255 105 85'};
<>你可以考虑使用这样的静态数组初始化:

char array1[11] = {255, 105, 85};
   char *array1[3] = {
         "255",
         "105",
         "85"
   };

   char *array2[3];

   array2[0] = array1[0];
   array2[1] = array1[1];
   array2[2] = array1[2];
这将使用3个指定的值填充数组1,并将所有其他元素设置为0(即,以索引3开始,以索引10结束的元素)

很奇怪,为什么编译器没有在您的案例中发出语法错误

更新: 还请注意,当您有这样一个数组1[2]表达式时,您正在处理单个字符。如果要对字符串进行操作(即,指定的数字有3个单独的字符串),则必须声明如下内容:

char array1[11] = {255, 105, 85};
   char *array1[3] = {
         "255",
         "105",
         "85"
   };

   char *array2[3];

   array2[0] = array1[0];
   array2[1] = array1[1];
   array2[2] = array1[2];
因此,您将拥有一个字符串数组。array1的每个条目将包含字符串“255”所在内存的指针(地址)(请注意,“255”是一个包含4个字符的数组:“2”、“5”、“5”、“0”)