gpt4 book ai didi

C sprintf 函数使我的程序崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 05:38:41 26 4
gpt4 key购买 nike

我正在观看在线学习 C 的类(class),我偶然发现了一些使我的程序崩溃的东西。在视频中,他们展示了以下代码片段:

#include <stdio.h>

int main()
{
char* ch;
int num = 12345;
sprintf(ch, "%d", num);
printf("%s\n", ch);
return(0);
}

我决定制作自己的小程序并进行测试。这是我写的代码:

#include <stdio.h>

#define A 65

int main()
{
int n = A;
printf("n is equal to %d\n", n);
n = atoi("10");
printf("n is equal to %d\n", n);
char* ch;
sprintf(ch, "%d", n);
printf("ch is equal to %s\n", ch);
return 0;
}

当我运行我的程序时,输出如下:

n is equal to 65
n is equal to 10

这部分之后我的程序崩溃了。我假设是 sprintf 函数导致的,但我不确定为什么,我是该语言的新手所以我不知道,我认为我已经根据视频中显示的代码片段正确地完成了所有操作。有人可以解释一下我做错了什么吗?

提前致谢。

最佳答案

In the video they show the following code snippet: [...]

如果这是他们认为应该有效的片段,请停止观看该视频:该片段具有未定义的行为,除非不幸的巧合,否则它不可能正常工作。

I've decided to make my own little program and test it.

您的程序存在完全相同的问题:sprintf 正在写入的缓冲区尚未初始化。更改 ch 的声明以为其分配一些空间,如下所示:

char ch[20];

这将防止您的代码写入未初始化指针指向的内存,从而修复未定义的行为。

Could you explain to me how char* could be used?

如果您想使用 char*,请为其分配一个适当大小的 malloc 结果,并在 free结束:

char *ch = malloc(20);
... // Put the rest of the code here
// Add this line before the end:
free(ch);

关于C sprintf 函数使我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25495943/

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