我想使用 calloc 和 snprintf。 您能检查一下我的简单代码并告诉我如何修复它吗? 我一直遇到访问冲突写入位置 0xFFFFFFFFB8A2D1F0 的错误。 谢谢!
int main()
{
char* buffer1;
buffer1 = (char*)calloc(1, 14);
int a = 15;
int b = 25;
char c[]="MON"
int k = snprintf(buffer1, 13, "%02d%02%s", a, b, c);
return 0;
}
希望请修复这个简单的代码。
您发布的代码无法编译。
source>:21:5: error: expected ',' or ';' before 'int'
21 | int k = snprintf(buffer1, 13, "%02d%02%s", a, b, c);
| ^~~
让我们解决这个问题。
尽管如此,固定代码还是有很多警告。
<source>: In function 'main':
<source>:21:42: warning: conversion lacks type at end of format [-Wformat=]
21 | int k = snprintf(buffer1, 13, "%02d%02%s", a, b, c);
| ^
<source>:21:44: warning: format '%s' expects argument of type 'char *', but argument 5 has type 'int' [-Wformat=]
21 | int k = snprintf(buffer1, 13, "%02d%02%s", a, b, c);
| ~^ ~
| | |
| char * int
| %d
<source>:21:35: warning: too many arguments for format [-Wformat-extra-args]
21 | int k = snprintf(buffer1, 13, "%02d%02%s", a, b, c);
| ^~~~~~~~~~~
<source>:21:9: warning: unused variable 'k' [-Wunused-variable]
21 | int k = snprintf(buffer1, 13, "%02d%02%s", a, b, c);
问题是格式字符串中缺少
d
。
始终启用编译器的警告并注意它们。使用 gcc,您可以使用
-Wall -Wextra -pedantic -Werror
。