C printf使程序崩溃
我正在使用C printf使程序崩溃,c,crash,printf,C,Crash,Printf,我正在使用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]); …我的程序崩溃。我打赌你没有分配spr
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]);
…我的程序崩溃。我打赌你没有分配sprintf写入的缓冲区 你需要像这样的东西:
int myNumber = 42;
char myBuffer[12];
sprintf(myBuffer, "%d", myNumber);
我打赌你没有分配sprintf写入的缓冲区 你需要像这样的东西:
int myNumber = 42;
char myBuffer[12];
sprintf(myBuffer, "%d", myNumber);
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);
printf("%s",buffer[8]);
sprintf的第一个参数必须是分配的缓冲区,而不是字符(缓冲区的一项)
您试图打印字符串,但传递了一个缓冲区项(字符)
总而言之,我强烈建议在尝试任何形式的字符串处理或动态内存分配之前,先阅读C语言书籍中有关数组和指针的第一章。如果您不知道某些东西是如何工作的,那么不要在语法上冒险 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);
printf("%s",buffer[8]);
sprintf的第一个参数必须是分配的缓冲区,而不是字符(缓冲区的一项)
您试图打印字符串,但传递了一个缓冲区项(字符)
总而言之,我强烈建议在尝试任何形式的字符串处理或动态内存分配之前,先阅读C语言书籍中有关数组和指针的第一章。如果您不知道某些东西是如何工作的,那么不要在语法上冒险 如果你不分享一些代码:不。哦,你应该使用
snprintf
而不是sprintf
你还有其他信息吗。你到底是如何使用sprintf的。崩溃会产生什么错误?您是否正在运行调试器并看到抛出了什么错误?请在问题中包含一些示例代码。“printf崩溃”并没有说任何关于这个问题的话。我会很高兴地投票,在这个问题包含崩溃的代码之后,重新打开这个问题。正如许多人所说,盲目地调试问题是很困难的。戴上我的读心术帽子,我猜你没有正确调用sprintf
,以至于它写满了你的堆栈,通常会导致未定义的行为。一旦调用UB,任何事情都可能发生。你运气好,程序崩溃了。如果它能工作一段时间,情况会更糟。。。然后在一段不相关的代码中崩溃。@Shweta:我看你已经用一个代码示例更新了你的问题。您给出的代码示例使我相信您对C不太了解。什么是sizeof(string)
?如果你不共享一些代码:不。哦,你应该使用snprintf
而不是sprintf
你还有其他信息吗。你到底是如何使用sprintf的。崩溃会产生什么错误?您是否正在运行调试器并看到抛出了什么错误?请在问题中包含一些示例代码。“printf崩溃”并没有说任何关于这个问题的话。我会很高兴地投票,在这个问题包含崩溃的代码之后,重新打开这个问题。正如许多人所说,盲目地调试问题是很困难的。戴上我的读心术帽子,我猜你没有正确调用sprintf
,以至于它写满了你的堆栈,通常会导致未定义的行为。一旦调用UB,任何事情都可能发生。你运气好,程序崩溃了。如果它能工作一段时间,情况会更糟。。。然后在一段不相关的代码中崩溃。@Shweta:我看你已经用一个代码示例更新了你的问题。您给出的代码示例使我相信您对C不太了解。(字符串)的大小是多少?