Witam.
Piszę malutki programik, który z tego co ja mu powpisuje sklei mi pewne wyrażenie regularne...
No i mam pewien problem z funkcjami wymienionymi w temacie... Jak tak czytać ten kod to wygląda że wszystko jest dobrze. A jak skompiluje go to strlen() zwraca mi długość tego wyrażenia o 1 większą niż jak sobie krokami liczę rozmiar tego wyrażenia (ciągu znakowego).
Oto cały kod (jest to tylko kawałeczek programu bo mi w tym momencie przystawiło :/). Bardzo prosze kogoś o przekompilowanie go na swojej maszynie i ew. wytłumaczenie dlaczego jest tak a nie inaczej :/
W main wystarczy tą funkcję wywołać i się wyśiwetli... u mnie oprócz tego "ciulowego wyrażenia" zwraca mi 46 i 47...
char * * BuildQueryArray_USER()
{
char * query_table[4] =
{
"SELECT (",
"SELECT COUNT ",
"INSERT INTO ",
"UPDATE ",
};
char * querys_end = "='.*';";
// Interpunklc
char * log_or = "|";
char * log_next = "(,[ ]{0,1}){0,1}";
char * section_end = ") ";
// bufor dla skłądania zapytań
char * buffer = NULL;
int buffer_len = 0;
int buffer_len2 = 0;
// SELECT
int select_len = 0;
char * select_columns[] =
{
"`id`",
"`links`",
"`domain`",
};
buffer = (char*) realloc((void*)buffer, buffer_len+1);
memcpy(buffer, "(", 1);
buffer_len++;
// Składanie sekcji wybierania wyświetlanych kolumn
for(int i = 0; i < (sizeof(select_columns)/sizeof(char *)); i++)
{
for(int j = 0; j < 2; j++)
{
// Dodanie kolumny
buffer = (char*) realloc((void*)buffer, buffer_len+strlen(select_columns[i]));
memcpy(buffer+buffer_len, select_columns[i], strlen(select_columns[i]));
buffer_len += strlen(select_columns[i]);
// Dodanie OR
buffer = (char*) realloc((void*)buffer, buffer_len+1);
memcpy(buffer+buffer_len, "|", 1);
buffer_len += 1;
}
}
buffer = (char*) realloc((void*)buffer, buffer_len+1);
memcpy(buffer+buffer_len, ")", 1);
buffer_len++;
// Wyświetlenie buforu
cout << buffer << endl << buffer_len << endl << strlen(buffer) << endl;
return query_table;
}
A teraz ciekawostka!! Jak zamiast
char * select_columns[] =
{
"`id`",
"`links`",
"`domain`",
};
dam
char * select_columns[] =
{
"`id`",
"`links`",
"`domain",
};
(czyli tylko o jeden znak zmniejszyłem jeden podciąg znakowy) to zwraca mi 44 i też 47!! ;/
A jak zwiększę ten sam podciąg o jeden znak to zwróci mi 48 i 48 ;/
Czy to coś z moim kompilatorem jest nie tak czy jaka cholera :/