1

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

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 编译器的 code::blocks。使用基于 win32 框架创建的项目。有人知道导致问题的原因是什么?

4

2 回答 2

1

C 中不允许以下构造:

array1 = {'255 105 85'};

相反,您可以考虑使用这样的静态数组初始化:

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

这将用 3 个指定值填充 array1 并将所有其他元素设置为 0(即元素以索引 3 开始并以索引 10 结束)。

令人惊讶的是,为什么编译器在您的情况下没有发出语法错误

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

   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 ')。

于 2012-07-27T19:54:37.560 回答
0

Array1 应该这样声明:

char array1[] = {0x255, 0x105, 0x85};

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

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

于 2012-07-27T19:52:01.183 回答