における構造体の文字列フィールドの割り当て:は、私は文字列を含むこの構造を使用してプログラムを書いてみるC
行あたりの設定テキストファイルの行を解析typedef struct s_conf
{
char *shell1;
char *shell2;
char *shell3;
char *shell4;
char *server_ip;
} t_conf;
を、私は、この情報を取得し、私は変数にそれを保存しますline1とline4のように。
char *line1 = "/var/www/host/current/app/console robot:file";
char *line4 = "192.168.00.00";
t_conf *conf;
if ((conf = malloc(sizeof(t_conf))) == NULL)
{
fprintf(stderr, "Malloc error\n");
return (-1);
}
strcpy(conf->shell1, line1);
strcpy(conf->server_ip, line4);
printf("line1 : '%s'\n"; line1);
printf("line4 : '%s'\n"; line4);
printf("t_conf->shell1 : '%s'\n", conf->shell1);
printf("t_conf->server_ip : '%s'\n", conf->server_ip);
出力:
line1 : '/var/www/host/current/app/console robot:file'
line4 : '192.168.00.00'
t_conf->shell1 : '/var/www/host/current/app'
t_conf->server_ip : '192.168.00.00'
正しくC文字列t_conf-> shell1を割り当てる方法を今、私は私の構造体は、変数LINE1及びLINE4の値をフィールドに割り当てたいですか? 私はmemcpy()、strdup()のような他の関数を試して、変数mallocを割り当てます:t_conf->shell1 = malloc(strlen(line1) + 1)
しかし、それは私に同じ結果を与える、私はline1の一部を失う?
strcpy
は危険であり、生産コードで避けなければならない、代替
strdup
(非標準)、または
snprintf
ある
line1
を格納するスペースが必要
'strcpy'と' strndup'を使用しないでください。代わりに、 'strndup'と' strnlen'はPOSIX.1-2008です。 – cat
@cat:あなたはおそらくstrdup(左側)を意味します。また、 'strlcpy'も良い選択です。 – Aif
@catあなたが編集したIMOは、標準よりもsnprintfです。 –