[英]C programming - assign a struct member variable to a char *
我有一個變量聲明為const char * server = NULL;
當用戶使用以下代碼將服務器的 IP 地址作為命令行參數傳遞給 C 程序時,會為該變量分配一個值。 例如,運行./cprogram -h 10.4.0.01
opt = 1;
while (opt < argc)
{
if (argv[opt] == NULL ||
argv[opt][0] != '-' ||
argv[opt][2] != 0)
{
print_usage();
return 0;
}
switch (argv[opt][1])
{
case 'h':
opt++;
if (opt >= argc)
{
print_usage();
return 0;
}
server = argv[opt];
break;
}
我不需要從程序中傳遞命令行參數並將值放在 .ini 文件中。
我現在在程序開始時讀取 .ini 文件並將值存儲在結構中。
struct lwm2m_object {
char clientname[LG_BUF];
char ipv4[LG_BUF];
char server[LG_BUF];
};
以正確的方式將結構成員變量server
分配給變量const char * server
使用此
server = &(lwm2m.server);
分配不正確。 正確的賦值是
server = lwm2m.server;
您的
server = &(lwm2m.server);
是雙重錯誤。 首先,您要復制的字符串是lwm2m.server
—— 請記住,數組衰減為指針。 所以,更好的是
server = lwm2m.server; // Still dangerous
但這只是復制指向數據的指針(淺拷貝)。 如果lwm2m_object
lwm2m
超出范圍,則關聯的字符串lwm2m_object::server
被釋放並可重新使用。 換句話說,你在server
的副本然后變成了一個dangling pointer 。
如果您知道lwm2m
server
存活(這樣就沒有獲得懸空指針的危險),那么淺拷貝就可以了(並且更可取)。 否則,您必須使用strcpyn
進行深度復制:
const char server[LG_BUF];
strcpyn(server, lwm2m.server, LG_BUF);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.