如何在 C 中将字符串文字从字符串数组分配给字符串指针?

问题描述 投票:0回答:1

我正在尝试创建一个程序,您可以在其中使用 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
时删除间接运算符,但这没有帮助。

arrays c pointers string-literals
1个回答
0
投票

你有一个指向字符串文字的指针数组

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]
三次。

© www.soinside.com 2019 - 2024. All rights reserved.