2012-10-07 62 views
1

我正在通過緩衝區(char *)進行讀取,並且我有一個光標,在那裏我正在跟蹤緩衝區的起始位置,有沒有辦法將字符7-64從緩衝區中複製出來,或者是我最好的選擇只是將poistion x中的緩衝區循環到位置y?如何在char *緩衝區中從位置y讀取x個字符?

目標緩衝區的大小是另一個函數的結果動態計算

初始化此返回

variable-sized object 'version' may not be initialized

相關代碼部分:

int32_t size = this->getObjectSizeForMarker(cursor, length, buffer); 
cursor = cursor + 8; //advance cursor past marker and size 
char version[size] = this->getObjectForSizeAndCursor(size, cursor, buffer); 

-

char* FileReader::getObjectForSizeAndCursor(int32_t size, int cursor, char *buffer) { 
    char destination[size]; 
    memcpy(destination, buffer + cursor, size); 
} 

-

int32_t FileReader::getObjectSizeForMarker(int cursor, int eof, char * buffer) { 
    //skip the marker and read next 4 byes 
    cursor = cursor + 4; //skip marker and read 4 
    unsigned char *ptr = (unsigned char *)buffer + cursor; 
    int32_t objSize = (ptr[0] << 24) | (ptr[1] << 16) | (ptr[2] << 8) | ptr[3]; 
    return objSize; 

} 
+0

你是對的nhahtdh這不是我的。 –

回答

1

將指針移動到前方buffer六個單元(獲得第七指數),然後memcpy 64-7(57)個字節,如:

const char *buffer = "foo bar baz..."; 
char destination[SOME_MAX_LENGTH]; 
memcpy(destination, buffer + 6, 64-7); 

你可能想要終止destination數組,以便您可以使用標準C字符串函數使用它。請注意,我們將在第58屆指數空字符,這是複製了57個字節後:

/* terminate the destination string at the 58th byte, if desired */ 
destination[64-7] = '\0'; 

如果您需要一個動態調整destination工作,使用指針,而不是一個數組:

const char *buffer = "foo bar baz..."; 
char *destination = NULL; 

/* note we do not multiply by sizeof(char), which is unnecessary */ 
/* we should cast the result, if we're in C++ */ 
destination = (char *) malloc(58); 

/* error checking */ 
if (!destination) { 
    fprintf(stderr, "ERROR: Could not allocate space for destination\n"); 
    return EXIT_FAILURE; 
} 

/* copy bytes and terminate */ 
memcpy(destination, buffer + 6, 57); 
*(destination + 57) = '\0'; 
... 

/* don't forget to free malloc'ed variables at the end of your program, to prevent memory leaks */ 
free(destination); 

老實說,如果你在C++的時候,你真的應該可能會被使用C++ strings librarystd::string類。然後,您可以調用string實例上的substr子串方法來獲取感興趣的57個字符的子字符串。這將涉及更少的頭痛和重新發明車輪。

但上面的代碼應該對C和C++應用程序都有用。

+0

對我來說很不錯。我會試試這個。 –

+0

只是好奇,爲什麼-7依賴於我的光標? –

+0

'64-7'只是爲了向你展示你複製了多少個字節。你可以用57代替這個。 –

相關問題