gpt4 book ai didi

c - 简单的程序结果为 "Stack Smashing"

转载 作者:行者123 更新时间:2023-11-30 14:21:35 25 4
gpt4 key购买 nike

我正在尝试连接两个字符串,然后在 UNIX 环境中进行系统调用。该程序执行了我想要的操作,但终止并出现错误 *** 检测到堆栈粉碎 ***

为什么会发生这种情况?

这是我的代码:

main(int argc, const char* argv[])
{

//Check if there is an arg otehr than file name
if(argc > 1)
{
int i;
//argv[0] is prog name start at 1.
for(i=1; i<argc; i++)
{

char st1[] = "wc -l ";
strcat(st1, argv[i]);
printf("%s",system(st1));
}

}
else
{
printf("\nExiting. No input files given.\n");
}
return 0;
}

最佳答案

str1 不够大,无法包含结果字符串,因为它只有足够的元素来包含 wc -l\0 (它是一个 char[7 ] 数组)。对 strcat() 的调用超出了数组的范围,覆盖了不应该覆盖的内存。

动态分配足够的空间,根据传入参数的长度计算,以确保有足够的内存可用:

char* s = malloc(7 + strlen(argv[i])); /* 7 is 6 for "wc -l " and null term. */
if (s)
{
sprintf(s, "wc -l %s", argv[i]);

free(s);
}

关于c - 简单的程序结果为 "Stack Smashing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14615013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com