我正在尝试创建一个程序,您可以在其中使用 WASD 在屏幕上移动玩家。我想要做的是将一个字符串分配给一个字符串指针。我尝试初始化字符串指针,将字符串数组中的字符串分配给字符串指针,但它会产生错误:
warning: assignment to 'char' from 'char*' makes integer from pointer without a cast [-Wint conversion]
事件发生在
*CurrentString = &AllStrings[1];
和*CurrentString = &AllStrings[(printCol + 1)];
。
我会告诉你它是如何工作的。有一个 4x4 网格,
row
表示分配给网格每一行的 1-4 y 值,column
表示分配给网格每一列的 1-4 x 值。当任一变量发生变化时,代表玩家的图标所在的行/列也会发生变化。然后修改图标的位置以适应新参数(例如,如果图标为 (2, 2) 并且玩家向左移动,则新位置为 (1, 2)。当前屏幕被清除,新屏幕被打印在图标在 (1, 2) 上。)
这是我的一些代码。为了简洁起见,我不得不砍掉大约一半的 if:
#include <string.h>
#include <stdio.h>
int main()
{
int x, y, z = 0;
int column = 0;
int row = 0;
int printBy;
int printCol;
int Verify = 0;
char player_response;
char *AllStrings[5] = {" ", "O ", " O ", " O ", " O"};
char *CurrentString; //declaring CurrentString
*CurrentString = &AllStrings[1];
*CurrentString = AllStrings[1];
printf("\n%s", *CurrentString);
x = 1;
while (x < 4) {
printf("\n%s", AllStrings[0]);
x++;
}
x = 0;
do {
scanf("%c", &player_response);
switch(player_response) {
case 'w':
system("clear");
row -= row; //`row` ascends in value top to bottom, starting at 0.
for (x = 0; x < 4; x++) {
if (row == x) {
printBy = x;
Verify = 1;
}
} //end for
if (Verify != 1) {
row += row;
}
if (Verify == 1) {
while (y < printBy) {
printf("\n%s", AllStrings[0]);
y++;
}
printf("\n%s", *CurrentString);
y = (row + 1);
while (y < 4) {
printf("\n%s", AllStrings[0]);
y++;
}
} //end if
y = 0; x = 0;
Verify = 0;
break;
如果这是您通常为指针赋值的方式,这是怎么发生的?我试图在每次出现
CurrentString
时删除间接运算符,但这没有帮助。
你有一个指向字符串文字的指针数组
char *AllStrings[5] = {" ", "O ", " O ", " O ", " O"};
即数组的每个元素都具有类型
char *
。
所以要分配一个指向(a的第一个字符)字符串文字的指针只需写
char *CurrentString; //declaring CurrentString
CurrentString = AllStrings[1];
并打印字符串文字,例如
printf( "%s\n", CurrentString );
或
puts( CurrentString );
注意这个while循环中的那个
x = 1;
while (x < 4) {
printf("\n%s", AllStrings[0]);
x++;
}
输出相同的字符串文字
AllStrings[0]
三次。