我有一个程序,其中包含以下用于构造星号数组的代码:
char array[Length][Height];
for (int count1 = 1; count1 <= Length; count1++)
{
for (int count2 = 1; count2 <= Height; count2++)
{
strcpy(array[count2][count3], "*");
cout << array[count2][count3];
}
}
cout << endl;
当我尝试编译程序时,我收到以下输出:
waves.cpp:48: error: invalid conversion from ‘char’ to ‘char*’
waves.cpp:48: error: initializing argument 1 of ‘char* strcpy(char*, const char*)’
输出中的'char *'部分引导我对指针进行一些阅读,虽然我理解它们的基本原理,但实际上实现它们有点困难(我猜这是阅读有关内容之间的区别)这样做。)
如果有人能告诉我这段代码中我出错了所以我可以用它作为一个有用的例子,那么帮助我理解指针的使用还有很长的路要走。
答案 0 :(得分:3)
试试这个:
char array[Length][Height];
for (int count1 = 0; count1 < Length; count1++)
{
for (int count2 = 0; count2 < Height; count2++)
{
array[count1][count2] = '*';
cout << array[count1][count2];
}
}
cout << endl;
请注意,您的代码包含一个错误:count1
和count2
将从1变为长度/高度,这将跳过数组中的第一个字节并写入一个字节超过其尺寸。在C / C ++中,数组索引从零开始并以最终结束 - 我纠正了上面代码中的错误。
strcpy()
用于将字符串从内存中的一个位置复制到另一个位置。你想要做的不是复制字符串,而是分配一个char值(从概念上讲,除了它的大小*之外,它与int没有区别)。 C语言没有本机字符串类型 - 相反,它使用连续的内存块,其末尾是一个值为零的字节(空终止符)。以这种方式处理字符串是困难,痛苦和容易出错的。由于您的帖子标有“c ++”,我建议您在将来处理字符串时使用C ++标准库的string类型。
*在某些平台上,int可能不大于char。
答案 1 :(得分:0)
使用'*'
括起角色。
此外,使用简单赋值运算符=
进行字符赋值,如:
array[count1][count2] = '*';
下标count1
&amp; count2
从0
到Length-1
&amp;分别为Height-1
。
strcpy()
是不必要的,因为你要逐个字符地组合数组。
答案 2 :(得分:0)
您所拥有的是char
数组的数组,但您尝试使用char*
进行复制。
array[count2][count3] = '*';