gpt4 book ai didi

c - 未使用的变量影响程序

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:48 24 4
gpt4 key购买 nike

我必须为大学编写一个小的 c 程序,它应该在命令行上再次打印给定的参数。任务是用指针来完成。所以我的问题是,当未使用的变量“bin”是代码的一部分时,程序完全正确。但是,如果我尝试删除代码或将其注释掉,程序将不再运行(它崩溃或不打印任何内容)...但是程序中根本没有使用该变量。我也可以更改它的名称,但不能更改它的声明值。也许有人可以帮助/解释问题所在:)谢谢!

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
char *text;
char bin = '\0'; //<---- unused variable
char space = 32;
int i = 0;

if(argc == 1){
printf("Bitte Parameter mit angeben!");
return 1;
}

text = malloc(sizeof(char));

for(i = 1; i < argc; i++){
text = realloc(text, sizeof(char) * (strlen(argv[i]) + 2 +
strlen(text)));
if(text == NULL)
return 1;
text = strcat(text, argv[i]);
text = strcat(text, &space);
}

text++;
printf("%s", text);
free(text);
return 0;
}

最佳答案

您的代码连接到 text 而不初始化 text。您需要以 text 作为空字符串开始:

text = malloc(sizeof(char));
text[0] = `\0` ; // empty string

然后将 &space 传递给 strcat() 是错误的,因为 space 不是以 nul 结尾的字符串。只需替换为:

text = strcat(text, " " ) ;

然后稍后删除 text++ 否则它会省略第一个字符,并且您不能 free() 修改后的指针而不会导致堆错误:

// text++;   <<< NOT NEEDED and makes free(text) bound to fail.
printf("%s", text);
free( text ) ;

为什么它与 bin present 一起工作是因为你很幸运,并且由于堆栈上的邻接,它恰好形成了 &space 的 nul 终止符。您再次幸运地看到任何未初始化的 text 指向的内容,并且释放修改后的指针可能不会导致错误或故障,因为程序结束时没有尝试分配任何进一步的内存。

关于c - 未使用的变量影响程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48066397/

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