我一直在浏览论坛,但我没有找到适用于我的情况的这个问题的答案.我正在尝试使用’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",NULL}; //execv call to sort file for names. break; default: sleep(1); printf("\nChild process has finished."); }
在系统调用中,我尝试按字母顺序对文件进行排序,以便按名称简单地收集相似的术语.
我是如此傻眼,因为这个错误发生在char * const中,其中包含我的execv系统调用的命令.此EXACT开关语句适用于不同的程序文件.有人能发现我失踪的东西吗?
谢谢
解决方法
在C(与C相反)声明不是语句.标签可以仅在声明之前.您可以编写例如在标签后插入空语句
case 0: ; char *const parmList[] = {"usr/bin/sort",NULL}; //execv call to sort file for names. break;
或者您可以将代码括在大括号中
case 0: { char *const parmList[] = {"usr/bin/sort",NULL}; //execv call to sort file for names. break; }
考虑到在第一种情况下变量的范围是switch语句,而在第二种情况下,变量的范围是标签下的内部代码块.该变量具有自动存储持续时间.因此退出相应的代码块后它将不会存在.