请教一下结构体赋值的问题

a6610293847 2009-08-08 04:11:14
typedef struct _HOST_INFORMATION{
ULONG Address;
USHORT Port;
USHORT HostNameLength;
UCHAR HostName[256];
} HOST_INFORMATION, *PHOST_INFORMATION;
int main()
{
PHOST_INFORMATION inf;
inf = (HOST_INFORMATION *)malloc(sizeof(HOST_INFORMATION)+strlen("192.168.205.42"));
memset(
inf,
0,
sizeof(HOST_INFORMATION) + strlen("192.168.205.42")
);
inf->Port = 2009;
inf->Address = inet_addr("192.168.205.42");
char *FileName = "192.168.0.1";
strcpy(inf->FileName, FileName);
printf("%s\n",inf->FileName);
//如果是.cpp文件提示'strcpy' : cannot convert parameter 1 from 'unsigned char [1]' to 'char *'
//如果是.c文件就能正确运行
}
为什么上面的程序在C中能运行,而在C++中会提示错误呢?是不是编译方式不同导致的呢?那在cpp中如何改写赋值呢?
...全文
67 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
a6610293847 2009-08-08
  • 打赏
  • 举报
回复
非常感谢大家的指点,结贴给分!!!
andylauxing 2009-08-08
  • 打赏
  • 举报
回复
新手上路,看不懂
danxuezx 2009-08-08
  • 打赏
  • 举报
回复
基本上是类型转换的问题,c++是强类型语言。解决方法如楼上几位所说。
xy_dream 2009-08-08
  • 打赏
  • 举报
回复
strcpy(inf->FileName, FileName);
是不是错了,结构体中没有FileName呀,
是不是inf->HostName
强制转换一下
strcpy((char*)inf->FileName, FileName);
Ghost90 2009-08-08
  • 打赏
  • 举报
回复

#include <windows.h> //要加这个头文件


typedef struct _HOST_INFORMATION{
ULONG Address;
USHORT Port;
USHORT HostNameLength;
UCHAR HostName[256];
} HOST_INFORMATION, *PHOST_INFORMATION;

void main()
{
PHOST_INFORMATION inf;
inf = (HOST_INFORMATION *)malloc(sizeof(HOST_INFORMATION)+strlen("192.168.205.42"));
memset(
inf,
0,
sizeof(HOST_INFORMATION) + strlen("192.168.205.42")
);
inf->Port = 2009;
//inf->Address = inet_addr("192.168.205.42"); 注释掉因为inet_addr 函数需要一个Socket的静态库
char *FileName = "192.168.0.1";
strcpy((char*)inf->HostName, FileName); //这个地方要强制转化下
printf("%s\n",inf->HostName);
//如果是.cpp文件提示'strcpy' : cannot convert parameter 1 from 'unsigned char [1]' to 'char *'
//如果是.c文件就能正确运行

}
MoXiaoRab 2009-08-08
  • 打赏
  • 举报
回复
strcpy(inf->HostName, (UCHAR)FileName);
xylicon 2009-08-08
  • 打赏
  • 举报
回复
C++的程序强制转换一下就是了。

strcpy((char*)(inf->HostName), FileName);
jingzhongrong 2009-08-08
  • 打赏
  • 举报
回复
PHOST_INFORMATION inf;
inf = (HOST_INFORMATION *)malloc(sizeof(HOST_INFORMATION));
memset(inf,0,sizeof(HOST_INFORMATION));
inf->Port = 2009;
inf->Address = inet_addr("192.168.205.42");
char *FileName = "192.168.0.1";
strcpy(inf->HostName, (UCHAR)FileName);
I_NBFA 2009-08-08
  • 打赏
  • 举报
回复
C++对类型的转换要求更严格,编译器不允许直接将unsigned char[]/*直接转换为char*,
用reinterpret_case强制一下吧.
另外你HOST_INFORMATION里没FileName啊?
unsigned char[1]才1个字节,拷过去就非法访问了.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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