OS X 控制台应用程序 - 无法读取参数
OS X console app - cannot read the arguments
在一个简单的控制台应用程序上,我无法读取参数
int main(int argc, char ** argv) {
if (argc > 1)
strcpy(path, argv[1]);
printf("arguments %d\n", argc);
....
argc 始终为 1
从控制台运行应用程序是这样的:
open mytestconsoleapp --args arg1 arg2 arg3
argc 总是 1。这对我来说很奇怪。
我不明白为什么,有什么问题?
如果您实际写的是 C++
而不是 C
,则可以使用它。
static std::string path;
int main( int argc, char* argv[ ] ) {
// With either solution you should make sure that the passed in
// argument isn't gigantic.
if ( argc > 1 ) {
path.assign( argv[ 1 ] );
std::cout << path << '\n'
}
// Or you could use one of the std::string constructors.
// This is a nice solution if you don't require global state.
if ( argc > 1 ) {
std::string buffer{ argv[ 1 ] };
std::cout << buffer << '\n';
}
}
如果您在 C
中执行此操作,则使用:
static char path[ 256 ];
int main( int argc, char* argv[ ] ) {
if ( argc > 1 ) {
strncpy( path, argv[ 1 ], sizeof( path ) - 1 );
printf( "%s\n", path );
}
// Or if you don't need the global variable.
if ( argv > 1 ) {
char buffer[ 256 ] = { 0 };
strncpy( buffer, argv[ 1 ], sizeof( buffer ) - 1 );
printf( "%s\n", buffer );
}
}
然后 运行 您的应用程序具有以下内容:./mytestconsoleapp test
行为正确。你的程序没有问题。但是,%d
是十进制的格式字符串。
我建议你试试 %s
?
在一个简单的控制台应用程序上,我无法读取参数
int main(int argc, char ** argv) {
if (argc > 1)
strcpy(path, argv[1]);
printf("arguments %d\n", argc);
....
argc 始终为 1
从控制台运行应用程序是这样的:
open mytestconsoleapp --args arg1 arg2 arg3
argc 总是 1。这对我来说很奇怪。
我不明白为什么,有什么问题?
如果您实际写的是 C++
而不是 C
,则可以使用它。
static std::string path;
int main( int argc, char* argv[ ] ) {
// With either solution you should make sure that the passed in
// argument isn't gigantic.
if ( argc > 1 ) {
path.assign( argv[ 1 ] );
std::cout << path << '\n'
}
// Or you could use one of the std::string constructors.
// This is a nice solution if you don't require global state.
if ( argc > 1 ) {
std::string buffer{ argv[ 1 ] };
std::cout << buffer << '\n';
}
}
如果您在 C
中执行此操作,则使用:
static char path[ 256 ];
int main( int argc, char* argv[ ] ) {
if ( argc > 1 ) {
strncpy( path, argv[ 1 ], sizeof( path ) - 1 );
printf( "%s\n", path );
}
// Or if you don't need the global variable.
if ( argv > 1 ) {
char buffer[ 256 ] = { 0 };
strncpy( buffer, argv[ 1 ], sizeof( buffer ) - 1 );
printf( "%s\n", buffer );
}
}
然后 运行 您的应用程序具有以下内容:./mytestconsoleapp test
行为正确。你的程序没有问题。但是,%d
是十进制的格式字符串。
我建议你试试 %s
?