我正在为3ds开发一款游戏,我希望它是cmd类型的游戏(我就是喜欢它).我试图让这个字符移动到我所有的x和y整数,但我得到了一个错误.这是我的密码.

/*
    Hello World example made by Aurelio Mannara for libctru
    This code was modified for the last time on: 12/12/2014 21:00 UTC+1
*/

#include <3ds.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
    gfxInitDefault();

    char player[1024] = "\x1b[";
    int tesx = 1;
    char tesxx = tesx + '0';
    char ot[] = ";";
    char oty[] = "H0";
    int test = 3;
    char testt = test + '0';
    //Initialize console on top screen. Using NULL as the second argument tells the console library to use the internal console structure as current one
    consoleInit(GFX_TOP, NULL);
    strcat(player, tesxx);
    strcat(player, ot);
    strcat(player, testt);
    strcat(player, oty);
    //Move the cursor to row 15 and column 19 and then prints "Hello World!"
    //To move the cursor you have to print "\x1b[r;cH", where r and c are respectively
    //the row and column where you want your cursor to move
    //The top screen has 30 rows and 50 columns
    //The bottom screen has 30 rows and 40 columns
    printf(player);

    // Main loop
    while (aptMainLoop())
    {
        //Scan all the inputs. This should be done once for each frame
        hidScanInput();

        //hidKeysDown returns information about which buttons have been just pressed (and they weren't in the previous frame)
        u32 kDown = hidKeysDown();

        if (kDown & KEY_START) break; // break in order to return to hbmenu

        // Flush and swap framebuffers
        gfxFlushBuffers();
        gfxSwapBuffers();

        //Wait for VBlank
        gspWaitForVBlank();
    }

    gfxExit();
    return 0;
}

这是我的错误.我对C非常陌生,所以如果这是一个简单的错误,我很抱歉.我试着搜索,但在网上什么也找不到.

C:/Users/Jeremy/Desktop/gaame/source/main.c:24:9: warning: 'strcat' offset 0 is out of the bounds [0, 0] [-Warray-bounds]
   24 |         strcat(player, testt);
      |         ^~~~~~~~~~~~~~~~~~~~~
C:/Users/Jeremy/Desktop/gaame/source/main.c:22:9: warning: '__builtin_stpcpy' offset 0 is out of the bounds [0, 0] [-Warray-bounds]
   22 |         strcat(player, tesxx);
      |         ^~~~~~~~~~~~~~~~~~~~~
c

推荐答案

函数strcat要求它的两个参数都是指向有效字符串的指针,根据定义,有效字符串是以空字符结尾的字符序列.

然而

strcat(player, tesxx);

第二个函数参数tesxx不是指向有效字符串的指针.而是一个简单的char.

因此,我建议您将这一行更改为以下内容:

player[2] = tesxx;
player[3] = '\0';

如果此行之前的字符串长度不能保证为2,则可以改为:

size_t len = strlen( player );
player[len+0] = tesxx;
player[len+1] = '\0';

或者,正如其他答案之一所建议的,您可以使用strncat,这允许您在字符串中附加单个字符:

strncat( player, &tesxx, 1 );

或者,你也可以改变台词

strcat(player, tesxx);
strcat(player, ot);
strcat(player, testt);
strcat(player, oty);

以下是:

snprintf( player + 2, (sizeof player) - 2, "%c%s%c%s", tesxx, ot, testt, oty );

更多信息,请参见功能snprintf.

如果这些行之前的字符串长度不能保证为2,则可以改为:

size_t len = strlen( player );
snprintf( player + len, (sizeof player) - len, "%c%s%c%s", tesxx, ot, testt, oty );

还可以使用函数snprintf构建整个字符串player:

    char player[1024];
    int tesx = 1;
    char tesxx = tesx + '0';
    char ot[] = ";";
    char oty[] = "H0";
    int test = 3;
    char testt = test + '0';
snprintf( player, sizeof player, "\x1b[%c%s%c%s", tesxx, ot, testt, oty );

C++相关问答推荐

无法删除C中文件夹内的文件

强制转换为“超类”并返回 C 是否违反严格别名?

如何在 C 中的结构数组中使用动态二维数组?

旋转位图并将浮点格式的结果坐标转换回像素数组的整数 x,y 值

是否有更高性能的 powf(10,floorf(log10f(x))) 实现

使用整数存储许多布尔值是否值得?

为什么`(char)~0`和`(unsigned char)~0`返回不同宽度的值?

union无法解码字节数组

假设指向同一个变量的两个指针是非法的/UB,为什么 C 编译器不能优化更改 const 指针的值?

是否使用 if (0) 跳过应该工作的switch 中的一个 case ?

C 中数组索引的求值顺序(相对于表达式)

为什么快速整数类型比其他整数类型快?

对平方数字求和时是否需要明确处理负数或零?

为什么我应该总是启用编译器警告?

C/C++ 中的 const 数组和静态 const 数组有什么区别

为什么为位字段分配值不返回相同的值?

为什么不自动假定#pragma 一次?

将输出重定向到文件时 printf() 和 system() 的结果顺序错误

使用模数的 C 加法

将双精度数分配给 C 中的 int 变量的非直观结果