2011-04-28 64 views
2

使用Code :: Blocks IDE进行缓冲区解析功能的小型编码项目,编译时出现奇怪的错误(如上所示)。我在网上做了一些研究,通常是因为Code :: Blocks在C++时试图编译C代码,事实并非如此。这是C.C错误,“'expected'='','';' ,'asm'或'__attribute__'在'Bufferpar'之前“

确切消息读取,再次如下

Line 3 : error: expected '=', ',', 'ASM', or '__attribute__' before 'BufferPar' 

其他的一切似乎编译细除了这小小的一段代码。我很无知,有什么想法?恐怕我也许忽略了一些小细节....

#include <string.h> 

PCHAR BufferPar(PCHAR pPagebuffer, PCHAR pInitchar, PCHAR pFinalchar) 
{ 
    PCHAR vPointer, pNchar, *phLocate; 
    CHAR String[1024]; 

    if(pPagebuffer == NULL) return NULL; 

    if((vPointer=strstr(pPagebuffer, pInitchar) == NULL){ 
     return vPointer;} 
     else vPointer += strlen(pInitchar); 

    *phLocate = vPointer; 

    if((pNchar=strstr(vPointer, pFinalchar) == NULL)){ 
    return pNchar;} 
    else pNchar[0]='\0'; 

    strcpy(String, vPointer); 

    pNchar=[0]=pFinalchar=[0]; 

    return String; 

} 
+0

什么是定义'PCHAR'标识符?另外,'C :: B'确实看起来像C++,而不是C,虽然在示例中没有看到“C :: B” - 那是什么意思? – 2011-04-28 06:56:46

+0

你有适当的标题来处理PCHAR? – shuttle87 2011-04-28 06:58:23

+0

@Michael Burr:我相信C :: B是[Code :: Blocks](http://www.codeblocks.org/)的简写。 – 2011-04-28 07:04:32

回答

2

你需要一个#definetypedef或适当的头声明/定义PCHAR

如果你是处于亏损状态,尝试#include <string.h>后加入以下:

typedef char CHAR; 
typedef char* PCHAR; 

中有片段,编译器会告诉你其他一些问题,所以我只是让你以这种方式解决它们。但是,我会说你应该密切注意if条款中的分配操作。

我会去那么远,建议你改变你的代码,遵循以下模式:

if((vPointer=strstr(pPagebuffer, pInitchar) == NULL){ ... } 

到:

vPointer=strstr(pPagebuffer, pInitchar); 

if(vPointer == NULL){ ... } 

我想你会有点悲伤的保存自己长远来说,通过避免if语句的条件表达式中不必要的复杂性。

+0

已修复。谢谢。 <3 – Polishh 2011-04-28 07:04:43

+0

我很欣赏输入。我仍然处于我的代码的调试过程中,必须首先通过这个小小的障碍。无论如何,我遇到的问题是我正在使用Windows Wininet API,大多数自定义功能都包含了PCHAR,DWORD和wininet.h。这解决了这个问题,你是正确的,我有一个公平的编译错误。感谢您的建议。再次,非常感谢它。 – Polishh 2011-04-28 07:13:43

1

超出此代码的许多问题未编译。

你应该在文件的顶部包含windows.h以摆脱PCHAR的问题和关于BufferPar的错误。

#include <windows.h> 

但是,这仍然不会解决编译问题。

你的表达:

if((vPointer=strstr(pPagebuffer, pInitchar) == NULL){ 

不能编译,因为你缺少一组额外的括号中。试试这个:

if((vPointer=strstr(pPagebuffer, pInitchar)) == NULL){ 

同样的事情在这里:

if((pNchar=strstr(vPointer, pFinalchar) == NULL)){ 

应该是:

if((pNchar=strstr(vPointer, pFinalchar)) == NULL)){ 

(也pNchar后else子句被打破)

而此行绝对没有意义:

pNchar=[0];=pFinalchar=[0]; 

这条线......

strcpy(String, vPointer); 

...是不安全的,因为你要复制不定长度的字符串转换成固定长度大小的缓冲区。改为使用strncpy或strcpy_s。或者至少做一些智能来验证源字符串不大于固定字符串的缓冲区大小。

而且最重要的是:

return String; 

不不不!不要返回一个指向堆栈变量的指针 - 你的程序最好会崩溃(或者更糟糕的是,根据函数被调用的方式和使用返回值,有一个非确定性错误)。在BufferPar返回后的后续函数调用会清除“String”保存的内存。

+0

对于额外的一组parens,编译器只是警告过我,但我很感激。 &&至于字符串长度,我的代码将在网上进行我的基本定义搜索。该字符串不能超过1024个字符。再一次,我欣赏这些意见。 – Polishh 2011-04-28 07:21:39

相关问题