Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C printf使程序崩溃_C_Crash_Printf - Fatal编程技术网

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不太了解。(字符串)的大小是多少?