【发布时间】:2021-02-26 12:41:39
【问题描述】:
我还是 C 的新手,所以我对它不是很了解。现在我正在尝试找出指针。
我想通过argv变量加载结构amqp_connection_info的参数。如何更改结构中参数的负载?
int main(int argc, const char **argv) {
amqp_connection_state_t conn;
// char const *user;
// char const *password;
// char const *host;
// int port;
// char const *vhost;
int debit_limit;
int message_count;
char const *new_queue = NULL;
char const *new_echange;
char const *echangetype;
char const *cle_liaison;
char const *contenu_message;
static int durable = 1; // La durabilité du queue
if (argc < 13) {
printf("Usage: amqp_producteur utilisateur mdp nom_hote port vhost debit_limit message_count new_queue \
new_echange echangetype cle_liaison contenu_message\n");
return 1;
}
struct amqp_connection_info ci;
// ci : variable globale contenant les paramètres de configuration de connexion
struct amqp_connection_info ci = {
argv[1],
argv[2],
argv[3],
atoi(argv[4]),
argv[5]};
debit_limit = atoi(argv[6]);
message_count = atoi(argv[7]);
new_queue = argv[8]; /* exp:"unroutable" */
new_echange = argv[9]; /* exp:"amq.direct" */
echangetype = argv[10];
cle_liaison = argv[11]; /* exp:"test" */
contenu_message = argv[12]; /* exp:"Message à envoyer" */
// Les routines AMQP
if ((conn = amqp_connexion(&ci)) != NULL)
{
amqp_creation_queue (conn, new_queue, durable);
amqp_creation_echange (conn, new_echange, echangetype, durable);
amqp_production(conn, new_queue, debit_limit, message_count, contenu_message, new_echange, cle_liaison);
amqp_deconnexion(conn);
}
else
{
printf("connexion impossible\n");
}
return 0;
}
编译的时候遇到了这个问题:
amqp_producteur.c: In function 'main':
amqp_producteur.c:60:5: error: initialization discards 'const' qualifier from pointer target type [-Werror]
argv[1],
^
amqp_producteur.c:61:5: error: initialization discards 'const' qualifier from pointer target type [-Werror]
argv[2],
^
amqp_producteur.c:62:5: error: initialization discards 'const' qualifier from pointer target type [-Werror]
argv[3],
^
amqp_producteur.c:63:5: error: initialization makes pointer from integer without a cast [-Werror]
atoi(argv[4]),
^
amqp_producteur.c:63:5: error: (near initialization for 'ci.vhost') [-Werror]
amqp_producteur.c:64:5: error: initialization makes integer from pointer without a cast [-Werror]
argv[5]};
^
amqp_producteur.c:64:5: error: (near initialization for 'ci.port') [-Werror]
cc1: all warnings being treated as errors
【问题讨论】:
-
首先,哪个编译器记录了
int main(int argc, const char **argv)是main() 的有效实现定义形式?因为const不符合要求,所以argv必须在严格符合要求的程序中进行读/写。
标签: c