C将字符串解析为字符串数组

C parsing a string into an array of strings

在定义字符串数组时,我通常会像下面这样声明它:

    char *arr[5] =
{
    "example0",
    "example1",
    "example2",
    "example3",
    "example4"
};

我遇到的问题是我不知道如何将变量传递给 arr 的元素之一。

例如,

char str[6] = "1.0.0.1";

char *arr[6] =
{
    "example0",
    "example1",
    "example2",
    "example3 %s", str,
    "example4"
};

当然,这不起作用,这只是我遇到问题的基本说明。

我也知道我以后可以使用 strncat() 甚至 snprintf() 但是,为了避免用这些处理内存的痛苦,我只想知道是否将变量解析为其中一个字符串数组的可能在声明时。

... if parsing a variable into one of the strings of the array is possible at declaration.

在编译时,可以连接如下:

#define STR "1.0.0.1"
char str[] = STR;

char *arr[6] = { 
    "example0",
    "example1",
    "example2",
    "example3" " " STR, // Forms "example3 1.0.0.1"
    "example4"
};

也许 OP 对 run-time 期间形成的东西感兴趣。它使用 variable length array (VLA).

void foobar(const char *str) {
  int n = snprintf(NULL, 0, "example3 %s", str);
  char a[n]; // VLA.
  snprintf(a, sizeof a, "example3 %s", str);

  char *arr[6] = {
      "example0",
      "example1",
      "example2",
      a,
      "example4"
  };

  printf("<%s>\n", arr[3]);
}

int main(void) {
  foobar("1.0.0.1");
}

输出

<example3 1.0.0.>

或者 字符串 的 space 可以通过分配完成。

char *a = malloc(n + 1u);
sprintf(a, "example3 %s", str);
....
free(a);