printf崩溃了程序

Shw*_*eta 0 c crash printf

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

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

它工作正常,直到这里,但当我这样打印时:

printf("%s",buffer[8]);
Run Code Online (Sandbox Code Playgroud)

......我的程序崩溃了

Lun*_*din 5

typedef char* string;
Run Code Online (Sandbox Code Playgroud)

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

buffer[8]=(string*)malloc(sizeof(string));
Run Code Online (Sandbox Code Playgroud)

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

在C语言中对malloc的结果进行类型转换没有任何意义.在C++中,你必须进行演员表演.

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

buffer[8]=sprintf(buffer[8],"%d",inf[i].mPermissions);
Run Code Online (Sandbox Code Playgroud)

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

printf("%s",buffer[8]);
Run Code Online (Sandbox Code Playgroud)

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


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