strcpy() 显示不兼容的整数到指针转换

strcpy() showing incompatible integer to pointer conversion

提问人:Rupam Karmakar 提问时间:9/26/2023 最后编辑:chqrlieRupam Karmakar 更新时间:9/26/2023 访问量:63

问:

    char arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    char var;

    // Asking input from user
    for (int l = 0; l < 3; l++)
    {
        for (int k = 1; k < 3; k++)
        {
            if (k % 2 != 0)
            {
                var = get_int("Enter position for x: ");
                strcpy(arr[l][k], "x");
            }
            else
            {
                var = get_int("Enter position for o: ");
                strcpy(arr[l][k], "o");
            }
            design(var, arr);
        }
    }
arrays/ $ make tictactoe
tictactoe.c:20:24: error: incompatible integer to pointer conversion passing 'char' to parameter of type 'char *'; take the address with & [-Werror,-Wint-conversion]
                strcpy(arr[l][k], "x");
                       ^~~~~~~~~
                       &
/usr/include/string.h:141:39: note: passing argument to parameter '__dest' here
extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
                                      ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
2 errors generated.
make: *** [<builtin>: tictactoe] Error 1
数组 c char strcpy

评论

3赞 Tom Karzes 9/26/2023
arr[l][k]has type ,而其第一个参数需要 a。它们是不兼容的类型。charstrcpychar *
2赞 Some programmer dude 9/26/2023
你到底想做什么?初始化就像一个整数数组,而不是字符串,甚至不是字符。arr
1赞 Some programmer dude 9/26/2023
如果要复制单个字符,请使用字符常量进行赋值。喜欢并初始化适合字符的数组。arr[l][k] = 'x';
0赞 Gerhardh 9/26/2023
你似乎把玩家的交替动作和在棋盘上迭代混合在一起。
2赞 Jonathan Leffler 9/26/2023
你不应该使用 - 你使用单个字符,并且复制到任何行中的索引 2 意味着写入该行的末尾 - 如果它是最后一行,则可能超出数组的末尾。strcpy()strcpy()

答:

4赞 ikegami 9/26/2023 #1

arr定义为 ,因此是 。char arr[3][3]arr[l][k]char

strcpy需要 a ,指向 的指针,更具体地说,是指向它将复制字符串的一系列中的第一个的指针(以 NUL 结尾的值序列)。char *charcharchar

看起来你想要.arr[l][k] = 'x';


其他问题:

  • 以这种方式启动真的有意义吗?arr
  • 如果是水平偏移量,为什么要用它来确定是否或应该使用?kxo
  • 为什么不在任何地方使用?var
  • 你为什么要尝试遍历每个位置?
  • 为什么在这样做时跳过第一列?