gpt4 book ai didi

c - printf 使程序崩溃

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

我正在使用 sprintfint 转换为字符串,然后如果我使用 printf 程序崩溃,否则它可以正常工作。谁能告诉我原因?

typedef char* string;
buffer[8] = (string*)malloc(sizeof(string));
buffer[8] = sprintf(buffer[8],"%d",inf[i].mPermissions);

到这里为止一切正常,但是当我这样打印时:

printf("%s",buffer[8]);

...我的程序崩溃了。

最佳答案

typedef char* string;

C语言没有字符串类型。字符指针与分配的字符串不同。

buffer[8]=(string*)malloc(sizeof(string));

为什么要将缓冲区中的第 9 项设置为字符串? (C 是零索引的,因此 0-8 = 9 项)。那是一个指针数组吗?也许您打算分配一个 8 个字符的缓冲区?

用 C 语言对 malloc 的结果进行类型转换没有任何意义。在 C++ 中,您必须进行强制转换。

您正在分配指针的大小,而不是缓冲区的大小。

buffer[8]=sprintf(buffer[8],"%d",inf[i].mPermissions);

sprintf 的第一个参数必须是分配的缓冲区,而不是字符(缓冲区的一个项目)。

printf("%s",buffer[8]);

您正在尝试打印一个字符串,但传递的是缓冲区的一个项目(一个字符)。


总而言之,我强烈建议在尝试任何形式的字符串处理或动态内存分配之前,先阅读有关数组和指针的 C 语言书籍的第一章。如果您不知道某些东西是如何工作的,请不要在语法上冒险。

关于c - printf 使程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5865769/

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