这是原型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* …
我正在尝试为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.
当我使用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之后变得奇怪?
我的代码在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)