【发布时间】:2020-07-10 03:11:56
【问题描述】:
从现在开始,我正在为我的大学迷宫游戏编程。我几乎准备好了。只是需要美化它。
在这里我想'回合制作一个 setTitle 函数。每次测试它时,它都有一些我从未见过的奇怪症状。
因此,如果我对 title[255] 数组进行硬编码,标题将被附加到 cmd 数组中。在函数中将标题设置为参数时,我将值传递给 setTitle(char title[255])(例如“* MAZE RUNNER*”),程序崩溃。
我尝试了不同的数组大小,但这种症状似乎是随机出现的。
也许是我这边的初学者错误?
void setTitle(char title[255]) {
char cmd[] = "title ";
strcat(cmd, title);
system(cmd);
}
int main() {
setTitle("Hello Stackoverflow! I hope you can help me! feelssadman:(");
return 0;
}
【问题讨论】:
-
你没有足够的空间来存储/concat
title到cmd,切换到char cmd[255 + 6] = "title "; -
当您声明像
char arr[] = "Hello"这样的数组时,编译器会计算字符串的长度(在本例中为“Hello”)并将其放入[]。最后,它将被转换为char arr[6] = "Hello"。在您的情况下,cmd[]数组的大小为 7,因此您不能向其附加任何其他内容。 -
另外,在将数组作为参数传递时停止输入常量。当您拥有
void setTitle(char title[255])时,编译器会忽略255并将其视为void setTitle(char title[])。最后,title只是一个指向chars 数组的常量指针,所以它背后的实际声明是void setTitle(const char* title)。人们通常使用[],因此很明显该函数需要一个数组而不是单个值。