提问人:geek 提问时间:10/25/2023 最后编辑:ikegamigeek 更新时间:10/25/2023 访问量:71
如何使用 calloc 和 snprintf
How to use calloc and snprintf
问:
我想使用 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;
}
希望请修复这个简单的代码。
答:
1赞
ikegami
10/25/2023
#1
您发布的代码无法编译。
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
评论
0赞
geek
10/25/2023
这实际上不是错误点。我刚刚修复了错别字,但它仍然有一个错误。
0赞
geek
10/25/2023
您可以尝试复制并粘贴我再次修复的代码吗?
1赞
ikegami
10/25/2023
你错过了.同样,始终启用编译器的警告。#include <stdlib.h>
0赞
geek
10/25/2023
我很感激!
2赞
pmg
10/25/2023
#2
这对我有用:
#include <stdio.h>
#include <stdlib.h> // <string.h> not needed
int main(void)
{
char* buffer1;
buffer1 = calloc(1, 14); // cast not needed
if (!buffer1) { fprintf(stderr, "Memory Failure.\n"); exit(EXIT_FAILURE); }
int a = 15;
int b = 25;
char c[4] = "MON";
int k = snprintf(buffer1, 13, "%02d%02d%s", a, b, c);
// --------------- ^ ---------------
printf("k is %d; buffer1 has [%s]\n", k, buffer1);
free(buffer1); // release resources no longer needed
return 0;
}
评论
0赞
geek
10/25/2023
我很感激!
评论
"%02d%02%s"
;
"MON"
#include <stdlib.h>
<stdio.h>
%