小编yel*_*hil的帖子

我可以将const char*数组传递给execv吗?

这是原型execv:

int execv(const char *path, char *const argv[]);
Run Code Online (Sandbox Code Playgroud)

我可以传递一个const char指针数组作为第二个参数吗?

此示例程序在USE_CAST未设置时发出警告:

#include <unistd.h>
int main(int argc, char *argv[])
{
    if (argc > 0) {
        const char *exe_name = "/bin/echo", *message = "You ran";
        const char *exe_args[] = { exe_name, message, argv[0], NULL };
#ifdef USE_CAST
    execv("/bin/echo", (char **) exe_args);
#else
    execv("/bin/echo", exe_args);
#endif
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在编译时,gcc说,"如果我不使用强制转换,则从不兼容的指针类型传递'execv'的参数2".

POSIX文档execv(中途理由部分),它看起来像第二个参数是char *const为了向后兼容数组:

包含有关argv[]envp[]成为常量的语句,以明确未来的语言绑定编写者,这些对象是完全不变的.......遗憾的是,第四列无法使用......

"第四栏"所指的地方const char* …

c posix const const-correctness exec

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

mq_open:参数无效

我正在尝试为mq_notify 的手册页中的POSIX消息队列运行示例程序.我正在运行它./mq '/bla',它给了我错误mq_open: Invalid argument.

这是示例程序中提供错误的行:

mqdes = mq_open(argv[1], O_RDONLY);
Run Code Online (Sandbox Code Playgroud)

我试过把它换成

mqdes = mq_open("/bla", O_RDONLY | O_CREAT);
Run Code Online (Sandbox Code Playgroud)

但它仍然无效.

这一定很简单,但我无法弄清楚.我究竟做错了什么?

顺便说一句,这是RHEL 5.8.

编辑:我错误的第一个错误.没有O_CREAT,它说"没有这样的文件或目录".我想它试图打开一个不存在的消息队列.使用O_CREAT,我认为无效的参数错误是因为我只有两个参数,你需要四个O_CREAT.

c linux posix message-queue

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

使用float而不是double时输出奇怪

当我使用float而不是使用奇怪的输出double

#include <stdio.h>
void main()
{
    double p,p1,cost,cost1=30;
    for (p = 0.1; p < 10;p=p+0.1)
    {
        cost = 30-6*p+p*p;
        if (cost<cost1)
        {
            cost1=cost;
            p1=p;
        }
        else
        {
            break;
        }
        printf("%lf\t%lf\n",p,cost);
    }
    printf("%lf\t%lf\n",p1,cost1);
}
Run Code Online (Sandbox Code Playgroud)

如预期

按预期输出p= 3;

但是当我使用float输出时有点奇怪.

#include <stdio.h>
void main()
{
    float p,p1,cost,cost1=40;
    for (p = 0.1; p < 10;p=p+0.1)
    {
        cost = 30-6*p+p*p;
        if (cost<cost1)
        {
            cost1=cost;
            p1=p;
        }
        else
        {
            break;
        }
        printf("%f\t%f\n",p,cost);
    }
    printf("%f\t%f\n",p1,cost1);
}
Run Code Online (Sandbox Code Playgroud)

奇怪的增量风格

为什么p第二种情况下的增量在2.7之后变得奇怪?

c floating-point floating-point-precision

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

SP中的SPOJ小因子计划

小因子

我的代码在SPOJ中显示"错误输出",尽管它在我的编译器中运行没有问题.

该计划的代码是:

#include<stdio.h>

int factorial(int);

int main(){
    int a[100],t,n,i;
    scanf("%d",&t);
    for(i=0;i<t;i++){
        scanf("%d",&a[i]);
    }
    for(i=0;i<t;i++){
        printf("%d",factorial(a[i]));
        printf("\n");   
    }
    return 0;
}

int factorial(int n){
    if(n==0){
        return 1;
    }
    else if(n==1){
        return 1;
    }
    else{
        return n*factorial(n-1);
    }
}
Run Code Online (Sandbox Code Playgroud)

c factorial

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