Как объединить несколько переменных char со значениями, разделенными пробелами, в переменной структуры?

#c #string #struct

Вопрос:

 #include lt;stdio.hgt; #include lt;string.hgt; #include lt;stdlib.hgt; struct donor  {  char *name;  char *code ;  char *donor;  char *ship;  char *quant;  char *id;  char *string;  struct donor *link;  } ;  typedef struct donor Donor; char box[20]; int main(){  Donor *node = malloc(sizeof(Donor));  node-gt; id = strdup("GA");  node-gt; code = strdup("HI");  node-gt; donor = strdup("TO");  node-gt; ship = strdup("GD");  node-gt; quant = strdup("UT");   // Combine all nodes' value into box.  sprintf(box, "%s %s %s %s %s", node-gt;id, node-gt;code, node-gt;donor, node-gt;ship, node-gt;quant);  printf("%s", box);  node-gt;string = strdup(box);  printf("%s", node-gt;string);  }  

Я создал донора структуры и присвоил всем узлам/переменным двухбуквенную строку. Я хочу, чтобы в моей строке node-gt;хранилась объединенная строка «GA ПРИВЕТ GD UT». Я попробовал sprintf здесь, чтобы скопировать значения всех узлов в поле символов, и узел-gt;строка = strdup(поле). Но после этого он ничего не выводит. Есть какие-нибудь идеи?

Комментарии:

1. Сколько строк вы говорите sprintf , что хотите напечатать, и сколько вы на самом деле предоставляете???

2. Сейчас всего 5. Я исправил это, но результат все тот же, без вывода.

3. добавить новую строку "%sn" ?

4. код отлично работает с -fsanitnize=undefined,address Valgrind и под ним (хотя есть некоторые утечки).

Ответ №1:

3 незначительных изменения. Я собрал и запустил. Так что попробуйте это:

 #include lt;stdio.hgt;  #include lt;string.hgt;  #include lt;stdlib.hgt;  struct donor  {  char *name;  char *code ;  char *donor;  char *ship;  char *quant;  char *id;  char *string;  struct donor *link;  } ;   typedef struct donor Donor;  char box[20]= {''}; /* force c string */  int main(){  Donor *node = malloc(sizeof(Donor));  node-gt; id = strdup("GA");  node-gt; code = strdup("HI");  node-gt; donor = strdup("TO");  node-gt; ship = strdup("GD");  node-gt; quant = strdup("UT");   // Combine all nodes' value into box.  sprintf(box, "%s %s %s %s %s", node-gt;id, node-gt;code, node-gt;donor, node-   gt;ship, node-gt;quant);  printf("%sn", box); /*request line output */  node-gt;string = strdup(box);  printf("%sn", node-gt;string); /*request line output */  fflush(stdout); /*final attempt to force output*/  }  

Если вы по-прежнему не получаете выходных данных, проблема не в C. Либо ваша цепочка инструментов, либо поврежденная библиотека [переустановка], либо конфигурация IDE [запуск непосредственно из командной строки], либо проблема на уровне ОС.

 My results: c:jim3tmpplccgt;tmpp GA HI TO GD UT GA HI TO GD UT c:jim3tmpplccgt;