我正在使用sprintf
将int
转换为字符串,然后如果我使用printf
,程序会崩溃,否则它会正常工作。谁能告诉我原因?
typedef char* string;
buffer[8] = (string*)malloc(sizeof(string));
buffer[8] = sprintf(buffer[8],"%d",inf[i].mPermissions);
它工作正常,直到这里,但是当我这样打印时:
printf("%s",buffer[8]);
...我的程序崩溃了。
答案 0 :(得分:5)
typedef char* string;
C语言没有字符串类型。 char指针与分配的字符串不同。
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语言书籍的前几章。如果您不知道某些内容是如何工作的,请不要抓住语法。
答案 1 :(得分:1)
我敢打赌,你没有分配sprintf写入的缓冲区。
您需要以下内容:
int myNumber = 42;
char myBuffer[12];
sprintf(myBuffer, "%d", myNumber);