C语言 标签只能用作语句的一部分错误

0pizxfdo  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(135)

我一直在看论坛,但我没有找到一个答案,这个问题适用于我的情况。我试图使用'sort'(unix)进行系统调用,但是,我收到一个错误,说:“标签只能是语句的一部分,声明不是语句。”下面是导致错误的代码。

int processid;  
switch(processid = fork()){                 //establishing switch statement for forking of processes.
case -1:
    perror("fork()");
    exit(EXIT_FAILURE);
    break;
case 0:
    char *const parmList[] = {"usr/bin/sort","output.txt","-o","output.txt",NULL};  //execv call to sort file for names.
    break;
default:
    sleep(1);
    printf("\nChild process has finished.");
}

在系统调用中,我试图按字母顺序对文件进行排序,以简单地按名称收集类似的术语。
我很惊讶,因为这个错误发生在一个char * const中,其中包含了我的execv系统调用的命令。此EXACTswitch语句适用于不同的程序文件。有人能看出我错过了什么吗?谢谢

prdp8dxp

prdp8dxp1#

在C(相对于C++)中,声明不是语句。标签只能在语句之前。例如,您可以在标签后插入一个null语句

case 0:
    ;
    char *const parmList[] = {"usr/bin/sort","output.txt","-o","output.txt",NULL};  //execv call to sort file for names.
    break;

也可以将代码括在大括号中

case 0:
    {
    char *const parmList[] = {"usr/bin/sort","output.txt","-o","output.txt",NULL};  //execv call to sort file for names.
    break;
    }

请注意,在第一种情况下,变量的作用域是switch语句,而在第二种情况下,变量的作用域是标签下的内部代码块。变量具有自动存储持续时间。因此,它在退出相应的代码块后将不会处于活动状态。

ffvjumwh

ffvjumwh2#

当在标签下定义一个变量时,你应该告诉变量的作用域(使用大括号)。

int processid;
switch(processid = fork())
{                 //establishing switch statement for forking of processes.
    case -1:
        perror("fork()");
        exit(0);
        break;
    case 0:
    {
        char *const parmList[] = {"usr/bin/sort","output.txt","-o","output.txt",NULL};  //execv call to sort file for names.
        break;
    }
    default:
        sleep(1);
        printf("\nChild process has finished.");
}

相关问题