编程接收信号SIGSEGV,分段故障
在线上:if(argv [1] [0] ==' - ')。
当我在unix shell中看到'-c'标志时,我试图让它做一些事情
int main(int argc, char **argv)
{
int target_column=1;
int column_flag=0;
int descending_flag=0;
/* command-line argument control */
printf("Argument(s) detected(%d)\n", argc);
/* default mode */
if (argc = 3)
{
if (argv[1][0] == '-')
{
/* column flag */
if (argv[1][1] == 'c')
{
column_flag=1;
printf("column flag found, ");
}
/* error checking */
else
{
fprintf(stderr, "tsort -c <column> [-d]\n");
exit(EXIT_FAILURE);
}
}
很多感谢您的回答。这绝对是小错字。
答案 0 :(得分:4)
如果要使用==
检查参数的数量:
if (argc = 3) // This assigns 3 to argc and always yields true
{
if (argv[1][0] == '-')
应该是
if (argc == 3)
{
if (argv[1][0] == '-')
编译器应该警告你这件事。如果没有,请始终使用-Wall -Wextra
进行编译以避免这种情况。
答案 1 :(得分:3)
您的代码中有拼写错误:
if (argc = 3)
应该是:
if (argc == 3)
人们经常将常量放在左边以避免这种类型的错误,例如:
if(3 = argc)
无法编译,因为无法将常量赋值给。
答案 2 :(得分:1)
您可以在此行中将argc的值更改为3:
if (argc = 3)
应该是:
if (argc == 3)
这有效(编译器不会给出错误消息)因为赋值在C ++中有返回值。在这种情况下,该值为3,其值为true。因此,您将始终尝试访问第一个查找“ - ”的参数,该参数可能不存在。这导致了段错误。