#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;