2010-08-18 112 views
0

我试图调用将某些字符添加到缓冲区的函数,然后再删除它们。但我仍然没有正确地调用这个函数。我正在研究Linux。共享缓冲区进程

ERROR: q_add makes an integer without a cast. 

这是部分代码:

do { 
    printf("Enter shared buffer operation "); 
    printf("i(init)/a(add)/r(remove)/t(items)/d(delete)"); 
    scanf("%c%c", &op, &discard); 
    int a=1; 
    char n; 

    switch (op) 
    { 
     case 'i': 
       printf("Enter nnumber a leter here!"); 
       scanf("%c" &n) 
       q_add(a, &n); 
       break; 

     case 'a': 
       q_delete(); 
       break; 

     case 'r': 
       q_remove(a, &n); 
       break; 
     //------------------------------------------------------------------ 

在适当的文件中的q_add()定义是:

void q_add(int n, char *x) 
{ 
    shbuf->count += n; 
    while (n-- > 0) 
    { 
     shbuf->buf[shbuf->inspos++] = *x++; 
     if (shbuf->inspos == QSIZ) 
      shbuf->inspos = 0; 
    } 
} 

而这个功能并未真正发挥作用;如果我取消了出口,我得到一个错误:

void q_delete() 
{ 
    if (-1 == shmctl(shmid, IPC_RMID, 0)) 
    { 
     perror("Can't remove shared mem"); 
     //exit(1); 
    } 
} 

回答

4

您调用的函数为:

int a; 
char n; 
.... 
q_add(a, n); 

但DEF是:

void q_add(int n, char *x) 

它需要一个char *为第二个参数,你发送一个char

3

q_add(1, &n);

+0

我试过了,在执行并输入值 – 2010-08-18 08:24:20

+0

之后,它返回了一个分段错误。您从不设置任何有效的值。这可能就是为什么它是残疾人。 – JeremyP 2010-08-18 08:44:41

+1

看着你的代码,使用'q_add(1,&n);',因为你只有一个字符 – JeremyP 2010-08-18 08:46:30