setTitle()函数使我的程序崩溃,如果未使用硬编码的字符串

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

[从现在起,我正在为大学设计迷宫游戏。我快准备好了只需要美化它。

[这里,我认为'回合执行setTitle函数。每当进行测试时,都会出现一些我从未见过的奇怪症状。

因此,如果我对title [255]数组进行硬编码,则title将附加到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;
}

c gcc c99
1个回答
0
投票

您的功能问题很简单;分配给数组cmd的大小由编译器自动完成,并带有初始化字符串的长度。为了使您的功能正常工作,只需在声明[]字符串时在cmd之间放置一些常量即可。

void setTitle(char title[]) {
    char cmd[255] = "title ";
    strcat(cmd, title);
    system(cmd);
}

也请记住,在声明函数参数时不需要255。被编译器忽略。您也可以将其替换为void setTitle(const char* title)(实际上是title的实际含义),但是在需要数组时将其声明为title[]是更常见和常规的做法。

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