我們被賦予了一個賦值,它將從終端獲取兩個命令並將第一個命令傳送到第二個命令。我相信我的代碼結構是正確的,但是在編譯它時抱怨我的初始char * cmd不是一個有效的語句。這是爲什麼發生?我很困惑,任何援助將不勝感激。C字符數組指針不是一個有效的語句
代碼:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void main(int argc, char *argv[])
{
int f_des[2];
if(pipe(f_des) == -1)
{
perror("pipe");
exit(1);
}
switch(fork())
{
case -1: perror("fork");
exit(2);
case 0: dup2(f_des[1], fileno(stdout));
close(f_des[0]);
close(f_des[1]);
char *cmd[] = {"/usr/bin/"+argv[1],argv[1], (char *)0};
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
int ret;
ret = execvp(cmd,path);
exit(3);
case default: dup2(f_des[0], fileno(stdin));
close(f_des[0]);
close(f_des[1]);
char *cmd[] = {"/usr/bin/"+argv[2], argv[2], (char *)0};
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
int ret;
ret = execvp(cmd,path);
exit(4);
}
}
錯誤:
cc: Error: lab1.c, line 22: Invalid statement.
char *cmd[] = {"/usr/bin/"+argv[1],argv[1], (char *)0};
^
cc: Error: lab1.c, line 22: Missing ";".
char *cmd[] = {"/usr/bin/"+argv[1],argv[1], (char *)0};
-----------------------------------------------------^
cc: Error: lab1.c, line 23: Invalid statement.
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
^
cc: Error: lab1.c, line 23: Missing ";".
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
------------------------------------------------------------^
cc: Error: lab1.c, line 24: Invalid statement.
int ret;
^
cc: Error: lab1.c, line 27: Invalid expression.
case default: dup2(f_des[0], fileno(stdin));
-----^
cc: Error: lab1.c, line 30: Invalid statement.
char *cmd[] = {"/usr/bin/"+argv[2], argv[2], (char *)0};
^
cc: Error: lab1.c, line 30: Missing ";".
char *cmd[] = {"/usr/bin/"+argv[2], argv[2], (char *)0};
------------------------------------------------------^
cc: Error: lab1.c, line 31: Invalid statement.
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
^
cc: Error: lab1.c, line 31: Missing ";".
char *path[] = {"HOME=/usr/home/", "LOGNAME=home", (char *)0};
------------------------------------------------------------^
cc: Error: lab1.c, line 32: Invalid statement.
int ret;
^
cc: Error: lab1.c, line 25: In this statement, "ret" is not declared.
ret = execvp(cmd,path);
^
cc: Error: lab1.c, line 25: In this statement, "cmd" is not declared.
ret = execvp(cmd,path);
-------------^
cc: Error: lab1.c, line 25: In this statement, "path" is not declared.
ret = execvp(cmd,path);
-----------------^
不能像''/ usr/bin /「+ argv [1]'那樣用'+'來添加兩個字符串。不要僅僅因爲你可以用其他語言來編寫語法。 – 2014-12-11 03:00:46
它看起來像你正在編譯爲C89。它是'default:',而不是'case default:'。 – mafso 2014-12-11 03:02:32
@餘浩,謝謝你的通知,你會怎麼建議呢? strcat的? – Kyle 2014-12-11 03:20:30