LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: top

编译时:提示assign makes integer from pointer without a cast

[复制链接]
发表于 2002-11-11 19:07:34 | 显示全部楼层
top123:
你仔细看看这一行:
struct stares3{ int s; char r3[10]; }statue3={'0","UVWXYZabcd"};
在'0"处怎么能用'呢?你是打字后可要仔细检查一下。你的程序可读性太差,我要读懂可要花不少时间。
发表于 2002-11-11 21:30:13 | 显示全部楼层
我把程序整理了一下,总算能通过编译,但是还有很多错误。

#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

pid_t p1,p2,p3,p4;

int Randomnum(void);

int main(void) {

struct stares1{ int s; char r1[10]; }statue1={0,"ABCDEFGHIJ"};
struct stares2{ int s; char r2[10]; }statue2={0,"KLMNOPQRST"};
struct stares3{ int s; char r3[10]; }statue3={0,"UVWXYZabcd"};
struct stares4{ int s; char r4[10]; }statue4={0,"efghijklmn"};
struct stares5{ int s; char r5[10]; }statue5={0,"opqrstuvwx"};

struct pidstatue {
        char name[2];
        int renum;
        int given;
        int nogiven;
        }capro[4]={{"p1",3,0,0},{"p2",2,0,0},{"p3",2,0,0},{"p4",4,0,0}};

int sysgiven = 5;

Randomnum();
if(p1<0) {
        printf(" fork error\n ");
        exit(EXIT_FAILURE);
}
else if( (p1==0) || (p1==1) ) {
        if((capro[0].renum <= sysgiven) && (capro[0].nogiven <= sysgiven)) {
                if((statue1.s=0)&&(capro[0].given<3)) {
                        capro[0].given++;
                        sysgiven--;
                        printf("%s\n",statue1.r1[10]);
                        statue1.s = 1;
                }
                if((statue2.s=0)&&(capro[0].given<3)) {
                        capro[0].given++;
                        sysgiven--;
                        printf("%s\n",statue2.r2[10]);
                        statue2.s = 1;
                }
                if((statue3.s=0)&&(capro[0].given<3)) {
                        capro[0].given++;
                        sysgiven--;
                        printf("%s\n",statue3.r3[10]);
                        statue3.s = 1;
                }
                if((statue4.s=0)&&(capro[0].given<3)) {
                        capro[0].given++;
                        sysgiven--;
                        printf("%s\n",statue4.r4[10]);
                        statue4.s = 1;
                }
                if((statue5.s=0)&&(capro[0].given<3)) {
                        capro[0].given++;
                        sysgiven--;
                        printf("%s\n",statue5.r5[10]);
                        statue5.s = 1 ;
                }
                sysgiven = 5;
                exit(EXIT_SUCCESS);
        }        
        else
                printf(" Dead \n");
}
Randomnum();
if(p2<0) {
        printf(" fork error\n " );
        exit(EXIT_FAILURE);
}
else if((p2==0) || (p2==1)) {
        if((capro[1].renum <= sysgiven) && (capro[1].nogiven <= sysgiven)) {
                if((statue1.s=0)&&(capro[1].given<3)) {
                        capro[1].given++;
                        sysgiven--;
                        printf("%s\n",statue1.r1[10]);
                        statue1.s = 1;
                }
                if((statue2.s=0)&&(capro[1].given<3)) {
                        capro[1].given++;
                        sysgiven--;
                        printf("%s\n",statue2.r2[10]);
                        statue2.s = 1;
                }
                if((statue3.s=0)&&(capro[1].given<3)) {
                        capro[1].given++;
                        sysgiven--;
                        printf("%s\n",statue3.r3[10]);
                        statue3.s = 1;
                }
                if((statue4.s=0)&&(capro[1].given<3)) {
                        capro[1].given++;
                        sysgiven--;
                        printf("%s\n",statue4.r4[10]);
                        statue4.s = 1;
                }
                if((statue5.s=0)&&(capro[1].given<3)) {
                        capro[1].given++;
                        sysgiven--;
                        printf("%s\n",statue5.r5[10]);
                        statue5.s = 1;
                }
                sysgiven = 5;
                exit(EXIT_SUCCESS);
        }
        else
                printf(" Dead \n");
}
Randomnum();
if( p3<0 ) {
        printf(" fork error\n " );
        exit(EXIT_FAILURE);
}
else if((p3==0) || (p3==1)) {
        if((capro[2].renum <= sysgiven) && (capro[2].nogiven <= sysgiven)) {
                if((statue1.s=0)&&(capro[2].given<3)) {
                        capro[2].given++;
                        sysgiven--;
                        printf("%s\n",statue1.r1[10]);
                        statue1.s = 1;
                }
                if((statue2.s=0)&&(capro[2].given<3)) {
                        capro[2].given++;
                        sysgiven--;
                        printf("%s\n",statue2.r2[10]);
                        statue2.s = 1;
                }
                if((statue3.s=0)&&(capro[2].given<3)) {
                        capro[2].given++;
                        sysgiven--;
                        printf("%s\n",statue3.r3[10]);
                        statue3.s = 1;
                }
                if((statue4.s=0)&&(capro[2].given<3)) {
                        capro[2].given++;
                        sysgiven--;
                        printf("%s\n",statue4.r4[10]);
                        statue4.s = 1;
                }
                if((statue5.s=0)&&(capro[2].given<3)) {
                        capro[2].given++;
                        sysgiven--;
                        printf("%s\n",statue5.r5[10]);
                        statue5.s = 1;
                }
                sysgiven = 5;
                exit(EXIT_SUCCESS);
        }
        else
                printf(" Dead \n");
}
Randomnum();
if( p4<0 ) {
        printf(" fork error\n " );
        exit(EXIT_FAILURE);
}
else if((p4==0) || (p4==1)) {
        if((capro[3].renum <= sysgiven) && (capro[3].nogiven <= sysgiven)) {
                if((statue1.s=0)&&(capro[3].given<3)) {
                        capro[3].given++;
                        sysgiven--;
                        printf("%s\n",statue1.r1[10]);
                        statue1.s = 1;
                }
                if((statue2.s=0)&&(capro[3].given<3)) {
                        capro[3].given++;
                        sysgiven--;
                        printf("%s\n",statue2.r2[10]);
                        statue2.s = 1;
                }
                if((statue3.s=0)&&(capro[3].given<3)) {
                        capro[3].given++;
                        sysgiven--;
                        printf("%s\n",statue3.r3[10]);
                        statue3.s = 1;
                }
                if((statue4.s=0)&&(capro[3].given<3)) {
                        capro[3].given++;
                        sysgiven--;
                        printf("%s\n",statue4.r4[10]);
                        statue4.s = 1;
                }
                if((statue5.s=0)&&(capro[3].given<3)) {
                        capro[3].given++;
                        sysgiven--;
                        printf("%s\n",statue5.r5[10]);
                        statue5.s = 1;
                }
                sysgiven = 5;
                exit(EXIT_SUCCESS);
        }
        else
                printf(" Dead \n");
}
}

int Randomnum(void)
{
        int i;
        i = random();
        i = i%4;
        switch(i) {
        case 0 : p1 = fork();
                 break;
        case 1 : p2 = fork();
                 break;
        case 2 : p3 = fork();
                 break;
        case 3 : p4 = fork();
                 break;
        }
        return;
}
发表于 2002-11-11 22:17:02 | 显示全部楼层
我整理这个程序花费了不少时间,既使如此,程序仍然存在大量错误。由于不了解编程的背景,所以有很多错误没法改进,特别是有逻辑错误的地方。但我需要特别针对top123指出的是:你写的程序表明你C语言和操作系统基础知识严重缺乏,恐怕教材都没有认真看过一遍。你对结构成员的引用居然采用"->"而不是句点,恐怕不是一般的马虎造成的。看看这句:
struct stares1{ int s; char r1[10]; }statue1={"0","ABCDEFGHIJ"};
“0”表示字符串,而你把它赋值给整型变量s,自然会在编译时出现“assign makes integer from pointer without a cast”这样的错误提示了,改正的办法很简单,只要把双引号去掉,字符串“0”变成整数0即可。在对fork()函数的使用上,你可能没有搞清楚fork()函数调用成功后在父进程中返回的是子进程的pid值,这个pid值肯定大于零,但不可能等于1,因为在linux中pid为1的进程只能是init,它是一切进程的父进程。所以在调用Randomnum()后,接下来的判断语句: if( (p1==0) || (p1==1) ) 中实际上变成了if(p1==0)。这会使程序的不按你设想的方式运行。在程序的结构上,显得重复冗长,如果能把结构变量数组化,并使用循环语句,程序的结构一定会显得简洁清晰,你也无需费劲去写那么多行代码了。
这只是我的一家之言,不妥之处,请你原谅。
 楼主| 发表于 2002-11-11 23:48:04 | 显示全部楼层
非常感谢您的关心! 我改正过了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表