C: объединение нескольких строк обрезает часть строки после объединения - PullRequest
1 голос
/ 20 июня 2020

Мне нужно объединить несколько строк в одну строку в c и для того же, используя snprintf,

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
  char id[] =  "D0D0-0000-0000-0000-0001-A431";
  char mac[] = "fc017c0f2b75";
  char aid[] = "1";

  printf("size of id :: %ld\n", sizeof(id));
  printf("size of mac :: %ld\n", sizeof(mac));
  printf("size of aid :: %ld\n", sizeof(aid));

  char *uniqueID = (char*)malloc(50);
  snprintf(uniqueID, sizeof(uniqueID), "%s.%s.%s", id, mac, aid);
  printf("uniqueID :: %s\n", uniqueID);
  printf("size of uniqueID :: %ld\n", sizeof(uniqueID));
}

и для заданных требований, используя приведенный выше код, я могу создать ниже результата:

size of id :: 30
size of mac :: 13
size of aid :: 2
uniqueID :: D0D0-00
size of uniqueID :: 8

, тогда как требуемый результат:

size of uniqueID :: D0D0-0000-0000-0000-0001-A431.fc017c0f2b75.1

В чем здесь проблема? Как решить эту проблему?

1 Ответ

1 голос
/ 20 июня 2020

Указанный вами размер snprintf неверен (sizeof(uniqueID) - размер указателя = 8). В вашем случае это должно было быть:

  snprintf(uniqueID, 50, "%s.%s.%s", id, mac, aid);

Если бы uniqueID был массивом, как показано ниже, ваша программа работала бы нормально (sizeof(uniqueID) - размер массива символов = 50 ):

  char uniqueID[50] = {};
  snprintf(uniqueID, sizeof(uniqueID), "%s.%s.%s", id, mac, aid);
...