下标需要数组或指针ERROR

时间:2010-06-01 20:28:42

标签: c++

我知道我的错误是什么,无法解决问题。

我正在编写一个winAPI来计算找到'a'个字符的数量是一个givien文件。 我仍然得到错误“下标需要数组或指针”(请在代码中找到注释)

#include "stdafx.h"
#include <windows.h>


int _tmain(int argc, _TCHAR* argv[])
{
    WCHAR str=L'a';
    HANDLE A;
    TCHAR *fn;

    fn=L"d:\\test.txt";
    A= CreateFile(fn,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

    if(A==INVALID_HANDLE_VALUE)
    {
        _tprintf(L"cannot open file \n");
    }

    else
    {
        DWORD really;
        int countletter;
        int stringsize;
        do
        {
            BYTE x[1024];


            ReadFile(A,x,1024,&really,NULL);
            stringsize = sizeof(really);
            for(int i =0;i<stringsize;i++)
            {

                if(really[i]==str)   //here Im getting the error
                    countletter++;
            }
        }while(really==1024);

            CloseHandle(A);
            _tprintf(L"NUmbers of A's found is %d \n",countletter);
    }

    return 0;
}

现在我知道我不能在数组和WCHAR之间进行比较但是要修复它吗?

2 个答案:

答案 0 :(得分:1)

您的变量really既不是数组也不是指针,因此下标(really[i])是非法的。

答案 1 :(得分:0)

ReadFile()将数据放入 second 参数中,例如x

在您的代码中,really是读取的字节数。这只是一个数字。你不能把一个下标放在普通数字上,因此就是错误信息。

所以改变

if(really[i]==str)

if (x[i] == str) 

但你会遇到另一个问题:

DWORD really;
int countletter;
int stringsize;

do {
    BYTE x[1024];

    bool bResult = ReadFile(A, x, 1024, &really, NULL); // must save the result
    if (bResult) 
        break; // Error!

    // stringsize = sizeof(really); // <== NO NO NO will always return 8
    stringsize = really;  // this is what you need

    for (int i = 0; i < stringsize; i++)
    {
        if(x[i] == str)
            countletter++;
    }
} while (really == 1024);

当然,您需要一些错误处理,真的需要有意义的变量名称。如果您使用inputBufferbytesRead代替xreally,那么您的问题就会很明显。

已编辑添加:

你的评论是正确的,我以前的编辑太过分了。确实,倒数第二个读取应该返回1024个字节,而 last 将返回&lt; 1024.但我仍然会在阅读后立即检查bytesRead == 0,因为它更容易理解。