c - snprintf 和字符串数组语法

标签 c arrays string struct printf

我有一个包含字符串数组的结构,但有时我不知道如何使用它
例如:

struct A
{
  char** b;
};

size_t two = 2;
struct A a = malloc(sizeof(struct A));
b = (char**) malloc(sizeof(char*) * 2);
a->b[0] = "1";
snprintf(a->b[1], 4, "%d", two); //this line makes a mess

如果我将 snprintf 用于定义为 char* 类型的变量,则效果非常好,但 a->b[1] 本身不是 char* 类型吗?
为什么它不起作用(如果我在 a->b[1] 上使用 printf,它会显示该值,但当我之后执行任何 malloc 时程序崩溃)以及我应该做什么才能使其工作?

最佳答案

这一行

snprintf(a->b[1], 4, "%d", two);

取消引用a->b[1],尚未设置。您无法写入其中。如果您想写入a->b[1],请这样做:

a->b[1] = malloc(4);
snprintf(a->b[1], 4, "%3d", two);

现在a->b[1]有一个4字节的可写内存块。 %3d 将输出限制为三位数字,以防变量 two 设置为更大的数字。

关于c - snprintf 和字符串数组语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36523146/

相关文章:

c - 如何在 opengl/SDL 中使用 ARGB 颜色?

c - 无法构建 'queue-like' 结构 - 结构声明有问题吗?

javascript - 如何在mongodb中使用自动生成的id查找数组元素

php - 没有正则表达式的 PHP 中的 Piglatin 程序?

arrays - 如何将包含数字+字符的字符串中的数字提取到 Ruby 中的数组中?

python-3.x - 使用 Pandas 过滤具有多个值的单元格中的字符串

C 中的类(不是 C++)

ios - 从数组中的值显示数组

java - 使用正则表达式拆分字符串

c++ - 为什么 PCRE 静态库在 Win 和 Linux 上大小不同