结构体赋值问题

flandy_feng 2009-04-26 06:45:52

typedef struct sock_info_attr {
char ipaddr[20];
unsigned short port;
} sock_info_t;

int main(int argc, char* argv[])
{
char opt;
sock_info_t sock_info;
memset((char*)&sock_info, 0, sizeof(sock_info));
if ((opt = getopt(argc, argv, "b:p:")) != (char)-1) {
switch (opt) {
case 'b':
strcpy(sock_info.ipaddr, optarg);
break;
case 'p':
sock_info.port = atoi(optarg);
break;
default:
usage(argv[0]);
break;
}
} else {
usage(argv[0]);
}
printf("ipaddr=%s,port=%d\n", sock_info.ipaddr, sock_info.port);
}

请问结构体中输入的值为什么不是自己输入的值???谢谢~
...全文
220 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
flandy_feng 2009-04-26
  • 打赏
  • 举报
回复
问题已经解决
flandy_feng 2009-04-26
  • 打赏
  • 举报
回复
执行 ./server -b 127.0.0.1 -p 89,输出的结果不是我输入的
icemoon1987 2009-04-26
  • 打赏
  • 举报
回复
单步调试一下,一步一步看结果,耐心一些,加油~
flandy_feng 2009-04-26
  • 打赏
  • 举报
回复
只是输出的结果不是输入的
flandy_feng 2009-04-26
  • 打赏
  • 举报
回复
头文件都没问题
die_angle 2009-04-26
  • 打赏
  • 举报
回复
了要用CHAR型,最好改成INT
icemoon1987 2009-04-26
  • 打赏
  • 举报
回复
哦?楼上的错误应该要包含相应的头文件才行,不能直接复制代码去编译。
mengde007 2009-04-26
  • 打赏
  • 举报
回复

1>d:\cc\csdn1.cpp(1267) : error C3861: “getopt”: 找不到标识符
1>d:\cc\csdn1.cpp(1270) : error C2065: “optarg”: 未声明的标识符
1>d:\cc\csdn1.cpp(1276) : error C3861: “usage”: 找不到标识符
1>d:\cc\csdn1.cpp(1280) : error C3861: “usage”: 找不到标识符
lingyin55 2009-04-26
  • 打赏
  • 举报
回复
是的话就是这句opt = getopt(argc, argv, "b:p:")) != (char)-1的返回值有问题了。

应该是opt = getopt(argc, argv, "b:p:")

[Quote=引用 5 楼 lingyin55 的回复:]
可能是你的switch只执行了default,所以结构体里面的东西都没有被赋过值。
你可以跟踪一下是不是执行了default,是的话就是这句opt = getopt(argc, argv, "b:p:")) != (char)-1的返回值有问题了。


引用楼主 flandy_feng 的帖子:
C/C++ code
typedef struct sock_info_attr {
char ipaddr[20];
unsigned short port;
} sock_info_t;

int main(int argc, char* argv[])
{
char opt;
soc…
[/Quote]
lingyin55 2009-04-26
  • 打赏
  • 举报
回复
可能是你的switch只执行了default,所以结构体里面的东西都没有被赋过值。
你可以跟踪一下是不是执行了default,是的话就是这句opt = getopt(argc, argv, "b:p:")) != (char)-1的返回值有问题了。


[Quote=引用楼主 flandy_feng 的帖子:]
C/C++ code
typedef struct sock_info_attr {
char ipaddr[20];
unsigned short port;
} sock_info_t;

int main(int argc, char* argv[])
{
char opt;
sock_info_t sock_info;
memset((char*)&sock_info, 0, sizeof(sock_info));
if ((opt = getopt(argc, argv, "b:p:")) != (char)-1) {
switch (opt) {
case 'b':
strcpy(sock_info.ipaddr, …
[/Quote]
cyldf 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 icemoon1987 的回复:]
我也是初学者,
请问optarg为什么没有定义呢?

还有就是if ((opt = getopt(argc, argv, "b:p:")) != (char)-1)
(char)-1 想表示的是什么?
可以单步跟一下,看到底有没有执行case中的语句。

还有strcpy函数是字符串拷贝,遇到'/0'就会停止,也许这里也有问题。

单步调试的话应该很容易找出问题所在,不过实验室机子没有VC环境,所以我只能猜猜看了,希望对你有所帮助吧。
[/Quote]
optarg是已经定义的全局变量,LS可以baidu之
icemoon1987 2009-04-26
  • 打赏
  • 举报
回复
我也是初学者,
请问optarg为什么没有定义呢?

还有就是if ((opt = getopt(argc, argv, "b:p:")) != (char)-1)
(char)-1 想表示的是什么?
可以单步跟一下,看到底有没有执行case中的语句。

还有strcpy函数是字符串拷贝,遇到'/0'就会停止,也许这里也有问题。

单步调试的话应该很容易找出问题所在,不过实验室机子没有VC环境,所以我只能猜猜看了,希望对你有所帮助吧。
cyldf 2009-04-26
  • 打赏
  • 举报
回复

int main(int argc, char* argv[])
{
char opt;//这里为什么opt一定要用char,其实int也可以的
sock_info_t sock_info;
memset((char*)&sock_info, 0, sizeof(sock_info));//
if ((opt = getopt(argc, argv, "b:p:")) != (char)-1) {//(char)-1换成-1试试,没有linux环境,只能靠猜了
switch (opt) {
case 'b':
strcpy(sock_info.ipaddr, optarg);
break;
case 'p':
sock_info.port = atoi(optarg);
break;
default:
usage(argv[0]);
break;
}
} else {
usage(argv[0]);
}
printf("ipaddr=%s,port=%d\n", sock_info.ipaddr, sock_info.port);
}

  • 打赏
  • 举报
回复
switch (opt) {
case 'b':
strcpy(sock_info.ipaddr, optarg);
break;
case 'p':
sock_info.port = atoi(optarg);
break;
default:
usage(argv[0]);
break;


case里全加打印,看看有opt是不是执行了default。
还有把你的命令行参数贴来看看。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧