当前位置:  技术问答>linux和unix

一个奇怪的问题(关于指向结构体的指针)

    来源: 互联网  发布时间:2015-04-27

    本文导语:  下面的程序哪里错了?? typedef struct {     SOCKET s;     char *a;     int b; }mystruct main() {     SOCKET s[100];     ...     myfun(s,"sssss");     ... } void myfun(SOCKET *s,char *sa) {     mystruct *mst;     int i;    ...

下面的程序哪里错了??
typedef struct
{
    SOCKET s;
    char *a;
    int b;
}mystruct

main()
{
    SOCKET s[100];
    ...
    myfun(s,"sssss");
    ...
}

void myfun(SOCKET *s,char *sa)
{
    mystruct *mst;
    int i;
    for(i=0;is=s[i];  
        mst->a=sa;    
        mst->b=i;
    }
}


|
你的程序有不少问题

typedef struct
{
    SOCKET s;
    char *a;
    int b;
}mystruct; /*语法错误:这里少了一个 ;*/

main()
{
    SOCKET s[100]; /*SOCKET是一个套接字*/
    ...
    myfun(s,"sssss");/*函数定义的时候,第二个参数是char*, 应该传入的是一个地址*/
    ...
}

void myfun(SOCKET *s,char *sa)
{
    mystruct *mst; /*这里只声明了一个mystruct结构的指针,没有分配空间*/
/*********************************/
    mst=(mystrcut*)malloc(sizeof(mystrcut)); /*分配空间*/
/*********************************/
    int i;
    for(i=0;is=s[i];  
        mst->a=sa;    
        mst->b=i;
    }
}


|
关于char *和字符串.
在传递参数的时候,应该是把字符串当成char *的类型,char *,char [],""都是传递首地址的.

刚做的测试,

#include 
#include 

void test(char * t)
{
printf("char:%c%cn",*t,*(t+1));
return ;
}

main()
{
char s[]="efgh";
test("abcd");
test(s);
}


编译过程中无任何警告,执行也正常,输出ab,ef.

|
兄弟,
mystruct *st;
定义了一个结构类型的指针的空间,而不是一个结构的空间,
你也许需要这样:

  st=malloc(sizeof(mystruct));  //不知道语法是否正确,
如果是在有些C++或者C中支持 new()的话也可以用着个涵数.

|
mst是指针类型的,不用new或malloc么?

|
哎~~~~~~~~~~~~~~

首先,可以不用管SOCKET是什么类型(应该是整数的吧),它的类型匹配没问题的,这看代码就可以知道了.
而定符串,字符数组,指向字符的指针都是一样的,在不引起混乱的情况下是可以通用的.这些都没问题.

而mst的多次赋值覆盖值的作法只是逻辑上的错误,最多有个warning.

关键是,你看看你的mst,是定义成指针的.而在没有给它赋值的情况下便使用了,现在没有哪个编译器会允许这种做法吧.指针在使用前是一定要赋值的,不然指向不明,new/malloc或是利用其他的指针来赋值.

|
你声明的*mst在for循环中被多次覆盖,*mst的位置并没有发生变化,你将mst改成mystruct数组试试。

|
照FishCrazy(疯鱼)做就行了
呵呵,指针引用之前不给他分配空间就使用他。too naive!

|
SOCKET是一种什么数据类型啊!
不懂!

|
SOCKET是什么类型?
s[i]是什么?地址?

|
大哥 ,你的myfun()函数的实参“sssss”是字符串  而你在定义myfun()函数的时候形参是字符型的啊 ,这根本就会出错嘛

    
 
 

您可能感兴趣的文章:

  • 一个奇怪的指针问题?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 奇怪 linux 下 动态创建数组 这样写说结构体的实参类型无效
  • docker中文入门学习手册 iis7站长之家
  • 非常非常奇怪的结构体问题,希望老手
  • 奇怪!奇怪!真奇怪!!!
  • 奇怪奇怪真奇怪
  • 奇怪,真奇怪,在线等待
  • shm_open函数问题.奇怪!!!奇怪!!!!!
  • 奇怪奇怪...........?????...........
  • solaris上的C程序,编译报错: 存储类只能使用register,奇怪,奇怪!
  • 奇怪!奇怪!我用jbuilder编jsp程序,从数据库中取出的字符串型字段却显示16进制数
  • 奇怪的问题 奇怪的问题,向大家请教
  • 奇怪啊,奇怪,为什么我的JB7做EJB时,只要在EJB设计面板上随便做点东西,我的EJB的JAVA的源码就会变的不见了,或者少了很多字段申明??
  • 奇怪,CSDN的贴子,提问部分我最多能看到第4行??!!
  • accept,recvfrom接收到奇怪的ip
  • 好奇怪的问题哎………………怎么也不能安装!
  • 一个特奇怪的函数申明错误
  • unix下的非常的奇怪WC的问题,向unix高手请教 好急呀!!!!!!!!!!!!!!!
  • 奇怪!关于字串参数的问题?
  • 一个奇怪的路径问题
  • 一些奇怪的现象,帮帮我
  • !!!初学Java,遇到一个奇怪问题,请大家回答!!!
  • SOCKET发送奇怪问题!!!
  • 奇怪的四分之一屏!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3