如何使用calloc和snprintf

问题描述 投票:0回答:1

我想使用 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;
}

希望请修复这个简单的代码。

c printf calloc
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.