小编maw*_*wia的帖子

返回前的预期表达

以下c语句不通过编译器.error是"返回前的预期表达式".

           int max( int a,int b)
            {
                 a>b?return a:return b;
            }
Run Code Online (Sandbox Code Playgroud)

是的,我知道我可以写这个来寻找最大值

            return a>b?a: b;
Run Code Online (Sandbox Code Playgroud)

这是非常好的,将完美运行.但我的问题是第一个代码的确切问题.为什么我们在三元opoerator中使用return,虽然我们可以在那里很容易地使用函数调用?

提前致谢!!!

c

2
推荐指数
4
解决办法
6391
查看次数

*(char**)如何理解这个结构?

最近,在我当前项目中读取前代码时,我遇到了以下问题:

在实现Queue时,我以前编写的代码如下:

while(uq->pHead)
{
    char *tmp = uq->pHead;
    uq->pHead = *(char **)tmp;
    //...
}
Run Code Online (Sandbox Code Playgroud)

uq-> pHead的定义如下:

typedef struct {
        char* pHead;
        //...
} Queue;
Run Code Online (Sandbox Code Playgroud)

嗯,我对" uq->pHead = *(char**)tmp" 的使用感到很困惑,有人能详细解释一下吗?

如果我们假设*(uq-> pHead)= 32(即''),*(char**)tmp将其转换为指针形式,但......它怎么会有意义?

非常感谢.

c c++ pointers

2
推荐指数
1
解决办法
247
查看次数

隐式声明和varargs函数之间的冲突

任何人都可以确认标准所说的vararg函数的默认返回类型.我正在编译以下代码:

int main()
{
    maw(32,3,95,38,20,15);
    return 0;
}

int maw(int a,int b,...)
{
    int *p=&b,i=0;
    while(i++<a)
       printf("\t%d",*p++);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但它给出了错误:

foo.c:9: error: conflicting types for ‘maw’
foo.c:10: note: a parameter list with an ellipsis can’t match an empty parameter name list declaration
foo.c:4: error: previous implicit declaration of ‘maw’ was here
Run Code Online (Sandbox Code Playgroud)

但如果在定义maw期间,如果我提到它,因为void maw(int a, int b, ...)汇编很好.

我可以从中得出vararg函数的默认返回类型可能不是int.

标准在这方面说了什么?谁能为我确认一下?


我知道,如果我只是标准化代码,它将完美运行.我已经做了.这没有问题.

我的观点是:这段代码有什么问题?它应该运行得很好.这样的代码不运行没有任何错误吗?

int main()
{

abc();
.....
return 0;
}

abc()
{
.......
}
Run Code Online (Sandbox Code Playgroud)

当使用变量参数函数时,问题就出现了.我知道标准对函数的默认declration的含义.

c

1
推荐指数
1
解决办法
2505
查看次数

有人可以帮助解释具有"堆栈粉碎"一词的回溯输出吗?

plz解释了运行编程后堆栈粉碎的后续结果,其中我给出的输入远远超过了charachter数组的容量.

    *** stack smashing detected ***: ./a.out terminated
             ======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0xb7f856d8]
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x0)[0xb7f85690]
./a.out[0x804845f]
    [0x666a6473]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:07 91312      /home/mawia/a.out
08049000-0804a000 r--p 00000000 08:07 91312      /home/mawia/a.out 
0804a000-0804b000 rw-p 00001000 08:07 91312      /home/mawia/a.out
084cd000-084ee000 rw-p 084cd000 00:00 0          [heap]
b7e6d000-b7e7a000 r-xp 00000000 08:07 221205     /lib/libgcc_s.so.1
b7e7a000-b7e7b000 r--p 0000c000 08:07 221205     /lib/libgcc_s.so.1
b7e7b000-b7e7c000 rw-p 0000d000 08:07 221205     /lib/libgcc_s.so.1
b7e8a000-b7e8b000 rw-p b7e8a000 00:00 0 
b7e8b000-b7fe3000 r-xp 00000000 08:07 238955     /lib/tls/i686/cmov/libc-2.8.90.so
b7fe3000-b7fe5000 r--p 00158000 08:07 238955     /lib/tls/i686/cmov/libc-2.8.90.so
b7fe5000-b7fe6000 rw-p …
Run Code Online (Sandbox Code Playgroud)

c linux

1
推荐指数
1
解决办法
2658
查看次数

C,C++中的中断机制

嘿我正在写一个udp客户端服务器,其中一个客户端等待来自服务器的数据包.但是我想限制这个等待一段时间.客户端在发出警报的某个时刻没有得到响应,基本上它出来了开始采取补救步骤.那么它的可能解决方案是什么.我认为围绕recv编写一个包装器会起作用,但是如何完成这一点,我的意思是如何在该时间限制之后让recv为你发出警报.

在这方面的任何帮助将不胜感激.

谢谢!

c c++ sockets

1
推荐指数
1
解决办法
457
查看次数

整数溢出问题

请解释以下段落.

"接下来的问题是我们是否可以在不损失精度的情况下为变量赋值.如果我们只是在加法或减法期间检查溢出是不够的,因为有人可能会添加1到-5并将结果分配给无符号int.然后实际的添加不会溢出,但结果仍然不适合."

当我加1到-5我没有任何理由担心.答案是应该是-4.那么结果不合适的问题是什么?你可以在这里找到我要去的完整文章:

http://www.fefe.de/intof.html

c

0
推荐指数
2
解决办法
675
查看次数

为什么我使用此代码会出现分段错误?

运行此代码时出现分段错误.我无法弄清楚为什么会这样 - 有人能看到可能的原因吗?(我已经获得并初始化了信号量的共享内存.)

我的代码:
   #include<stdlib.h>
   #include<sys/types.h>
   #include<sys/shm.h>
   #include<sys/ipc.h>
   #include<stdio.h>
   #include<sys/sem.h>

   union semun 
   {
   int val;
   struct semid_ds *buf;
   unsigned short *array;
   } arg;



  int main()
  {
  key_t semkey;
  int shmid,semid,nsem,sops;
  struct sembuf buf[1];

  char *ptrr,*shm,c,*s;

  semkey=ftok("/home/mawia/abc.c",'a');

  printf("entered into main of producer\n");
  if(semkey<0)
  {
   perror("ftok");
   exit(1);
  }

  shmid=shmget(semkey,30,0777);

  if(shmid<0)
  {
   printf("error");
   perror("shmget");
   exit(1);
  }

  shm=shmat(shmid,0,0);
  if(shm==(char *) -1)
  {
  perror("shm");
  exit(1);
  } 

  s=shm;
  semid=semget(semkey,1,0777);
 if(semid<0)
 {
  printf("error");
  perror("semget");
  exit(0);
 }

 ptrr=shm+1;
 *s='w';
 printf("going to check the value 0th semaphores\n");
 buf[0].sem_num=0;
 buf[0].sem_op=0; …
Run Code Online (Sandbox Code Playgroud)

c semaphore segmentation-fault

-3
推荐指数
1
解决办法
3153
查看次数

标签 统计

c ×7

c++ ×2

linux ×1

pointers ×1

segmentation-fault ×1

semaphore ×1

sockets ×1