由于我制作3ds自制程序很有趣,所以其中一些代码对您来说似乎很陌生,但它基本上是相同的,但是可以添加一些额外的代码行。我正在尝试读取一个名为about.txt的文件。单独的文件夹。当我将其放在同一文件夹中时,它就起作用了,但是我丢失了该文件,然后我的伴侣说他想要在Scratch3ds-master\assets\english\text
中使用它,而不是在Scratch3ds-master\source
中,但我一直在输入错误。我是堆栈溢出的新手,所以这可能是太多的代码,但这是以下代码:
#include <fstream>
#include <string>
#include <iostream>
int main()
{
// Initialize the services
gfxInitDefault();
consoleInit(GFX_TOP, NULL);
int version_major;
int version_minor;
int version_patch;
version_major = 0;
version_minor = 0;
version_patch = 2;
printf("This is the placeholder for Scratch3ds\n\n");
std::ifstream about_file;
about_file.open("../assets/english/text/about.txt");
if (about_file.fail())
{
std::cerr << "file has failed to load\n";
exit(1);
}
答案 0 :(得分:0)
可能是您正在使用devkitpro软件包。而且devkitpro团队有可能为3DS编程提供等效于NDS的“ ARGV协议”。在这种情况下,如果您使用
int main(int argc, char* argv[]);
如果argv[0]
非零,则应该在argc
中具有可执行文件的完整路径。
https://devkitpro.org/wiki/Homebrew_Menu可能会有帮助。
您的程序对main()
应该接收什么样的参数没有先验知识,在您的问题中,您使用的是一个根本不接收任何参数的主函数。
C / C ++编程的既定标准是main()
将收到一个常量C字符串数组(对于 arg uments v argv > alue)和该数组中有效条目的数量(通常为 c ount命名为argc
)。如果您将原始代码替换为
#include <fstream>
#include <string>
#include <iostream>
int main(int argc, char* argv[])
{
// Initialize the services
// ... more code follows
然后,您可以通过测试argc > 0
来判断是否收到参数,然后可以使用argv[i]
来获取这些参数值。
通过自制程序开发,不太可能像典型的命令行工具那样传递诸如--force
或--directory=/boot
之类的参数,但仍有一件事仍然有用:第一个条目argv
中的,应该是正在运行的程序的完整路径。所以欢迎您尝试
std::cerr << ((argc > 0) ? argv[0] : "<no arguments>");
看看你得到什么。