我有这段代码给我带来了一些麻烦:
switch(errorNum){
case 404:
//Send back a 404 error
char outputBuf[MAXREQUESTLENGTH];
int outputLength = sprintf(outputBuf, "%s/r/n/r/n%s/r/n", "HTTP/1.0 404 Not Found","<html><body><h1>404 Page Not Found</h1></body></html>");
char output[outputLength + 1];
if(strcpy(output, outputBuf) == NULL){
die("strcpy error");
}
if(send(socketFD, output, outputLength, 0) != outputLength){
die("send error");
}
break;
当我用这段代码编译我的程序时,我收到了这些错误,
http-server.c: In function 'returnError':
http-server.c:28:6: error: a label can only be part of a statement and a declaration is not a statement
http-server.c:29:6: error: expected expression before 'int'
http-server.c:30:18: error: 'outputLength' undeclared (first use in this function)
http-server.c:30:18: note: each undeclared identifier is reported only once for each function it appears in
有人可以解释这些错误的含义吗?据我所知,我在这行中声明了outputLength:
int outputLength = sprintf(outputBuf, "%s/r/n/r/n%s/r/n", "HTTP/1.0 404 Not Found","<html><body><h1>404 Page Not Found</h1></body></html>");
我不确定在int
之前会发生什么。至于标签错误,我不知道为什么我会这样,因为我不相信我在使用标签。任何帮助将不胜感激。
答案 0 :(得分:6)
您不能在案例标签之间的中间声明。但是,您可以简单地引入一个新的本地范围,您可以在其中声明:
switch (errorNum)
{
case 404:
{
//Send back a 404 error
char outputBuf[MAXREQUESTLENGTH];
int outputLength = /* ... */
break;
}
case 405:
foo();
break;
// ...
}