由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - c warning
相关主题
#ifdef _MSC_VER 是什么意思啊?为什么foo1可以而foo2不行?
请问这是什么错误呀一个C语言的面试题,有点乱,麻烦看一下
问个C++问题,高手帮帮忙const 指针类型转换
32/64编程怎么做才好呢what is the meaning of this macro in visual studio, thanks
这个结果是啥,为什么呢?VC++ does not support strlen()
C++ Q 99-102 (转载)建议大家看看interlocked
Why should i include .cpp instead of .hplease help C++ beginner
A aimple C++ questionxcode for leopard BUG??? help.
相关话题的讨论汇总
话题: argv话题: execvp话题: const话题: warning话题: cmd
进入Programming版参与讨论
1 (共1页)
l**n
发帖数: 44
1
static void foo_execvp(const char* cmd, char const* const* argv)
{
...
#if defined(_MSC_VER)
_execvp(cmd, argv);
#elif defined(__MINGW32__)
execvp(cmd, argv);
#else
execvp(cmd, (char* const*)argv); //warning: cast discards qualifiers
from pointer target type
#endif
}
从我的测试来看,似乎只有在linux64 下才会出现这个警告信息,为什么?
如何消除这个warning?
多谢!
X****r
发帖数: 3557
2
因为你将一个char const* const*强制转换为char * const*,把char上面的
const去掉了,自然有这个警告。
除去警告最正确方法是把argv指向的内容深度复制一遍后传给execvp。

qualifiers

【在 l**n 的大作中提到】
: static void foo_execvp(const char* cmd, char const* const* argv)
: {
: ...
: #if defined(_MSC_VER)
: _execvp(cmd, argv);
: #elif defined(__MINGW32__)
: execvp(cmd, argv);
: #else
: execvp(cmd, (char* const*)argv); //warning: cast discards qualifiers
: from pointer target type

l**n
发帖数: 44
3
According to your reply, I modified the code:
...
#else
char* const* dp_argv = (char**)malloc(strlen(*argv)+1);
strcpy(*dp_argv,*argv);
execvp(cmd, dp_argv);
#endif
It works well. Thanks!

【在 X****r 的大作中提到】
: 因为你将一个char const* const*强制转换为char * const*,把char上面的
: const去掉了,自然有这个警告。
: 除去警告最正确方法是把argv指向的内容深度复制一遍后传给execvp。
:
: qualifiers

l**n
发帖数: 44
4
should free the deep copy

++ free(*dp_argv);

【在 l**n 的大作中提到】
: According to your reply, I modified the code:
: ...
: #else
: char* const* dp_argv = (char**)malloc(strlen(*argv)+1);
: strcpy(*dp_argv,*argv);
: execvp(cmd, dp_argv);
: #endif
: It works well. Thanks!

X****r
发帖数: 3557
5
argv是个数组啊,你要把它们都复制一遍才对。

【在 l**n 的大作中提到】
: According to your reply, I modified the code:
: ...
: #else
: char* const* dp_argv = (char**)malloc(strlen(*argv)+1);
: strcpy(*dp_argv,*argv);
: execvp(cmd, dp_argv);
: #endif
: It works well. Thanks!

1 (共1页)
进入Programming版参与讨论
相关主题
xcode for leopard BUG??? help.这个结果是啥,为什么呢?
C++ cast 小结C++ Q 99-102 (转载)
为什么cpp会有 const_cast ?Why should i include .cpp instead of .h
问个c++语言扩展的问题 (转载)A aimple C++ question
#ifdef _MSC_VER 是什么意思啊?为什么foo1可以而foo2不行?
请问这是什么错误呀一个C语言的面试题,有点乱,麻烦看一下
问个C++问题,高手帮帮忙const 指针类型转换
32/64编程怎么做才好呢what is the meaning of this macro in visual studio, thanks
相关话题的讨论汇总
话题: argv话题: execvp话题: const话题: warning话题: cmd