我正在使用命令行参数,并将其复制到字符指针。但它给了我一个错误。
int main(int argc, char *argv[])
{
char *cmdarg;
if(argc>1)
strcpy(cmdarg, argv[1]);
else
cmdarg = NULL;
return 0;
}
这给了我
Segmentation fault (core dumped)
您没有在要复制表达式argv[1]
指向的参数的地方分配内存。
尝试以下操作
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *cmdarg = NULL;
if( argc > 1 )
{
cmdarg = malloc( strlen( argv[1] ) + 1 );
if ( cmdarg != NULL ) strcpy( cmdarg, argv[1] );
}
// ... Some other code
free( cmdarg );
return 0;
}
如果只想存储指针argv[1]
的值,则只写
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *cmdarg = NULL;
if( argc > 1 )
{
cmdarg = argv[1];
}
// ... Some other code
return 0;
}
cmdarg通过声明是一个垃圾指针。我们必须为cmdarg指向分配动态内存。下面是示例代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *cmdarg;
cmdarg = malloc( 5 * sizeof(char));
if(argc>1)
{
strcpy(cmdarg, argv[1]);
printf("%s\n", cmdarg);
}
else
cmdarg = NULL;
free(cmdarg);
return 0;
}
使用参数./a.out yes
运行时的输出是yes
。
注意:使用strcpy()时分配的大小不应更小。确保使用strncpy()