سؤال

I have this piece of code:

#include "stdafx.h"
#include "afx.h"
...

char * connectionType;
...

int readParameters() {

    ...
    //hFile is a file handler previously initialized
    result = readParameter(hFile, connectionType);
    if (strcmp(connectionType, "3") == 0) {
        //do something
    } else {
        //do other thing
    }
    ...
}

int readParameter(HANDLE hFile, OUT char * buffer) {
   BOOL bResult = true;
   BOOL continueLine = true;
   char inBuffer[1];
   DWORD bytesToRead = 1;
   DWORD bytesRead = 0;
   OVERLAPPED stOverlapped = {0};

   char parameter[256] = {};
   int counter = 0;

   while (continueLine) {
       bResult = ReadFile(hFile, inBuffer, sizeof(char), &bytesRead, &stOverlapped);
       if (!bResult) {
       return 0;
       } else if (inBuffer[0] == '\n' || bytesRead == 0) {
           continueLine = false;
   } else {
            parameter[counter] = inBuffer[0];
            counter++;
            if (bResult && bytesRead == 0) {
                continueLinea = false;
            }
        }
    }

    parameter[counter] = '\0';
    memcpy(buffer, parameter, 256);

    return 1; 
}

By debugging, I know that the connectionType attribute ends up being a null terminated string "3", but the strcmp method keeps returning 3328 (>0). Is there a problem because "3" is a constant? What might be the problem?

هل كانت مفيدة؟

المحلول

I realized what was the problem with the code. The problem was that connectionType, whose value was a null terminated string "3", was in fact different to the line read from the file, which was actually a "3" plus a carriage return plus a null.

After I added that consideration to the code, my problem was solved.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top