Я понятия не имею, где этот код испорчен - в основном потому, что он отлично работает, когда я запускаю .exe под Win7 (скомпилирован с MSVS2010), но он не работает под Ubuntu (скомпилирован с г ++)C++ string и char * manipulation действующий weird
Вот проблемные сегменты:
char * context = nullptr;
ifstream input("file.txt");
string line;
while(getline(input, line)) {
char * line1 = new char[line.size() + 1];
copy(line.begin(), line.end(), line1);
line1[line.size()] = '\0';
char * token = strtok_r(line1, " ", &context);
if(labela(token))
cout << "yes";
else
cout << "no";
// ...
token = (nullptr, " ", &context);
}
// ...
это labela (...)
bool labela(char * c) {
if(c == nullptr)
return false;
int i = 0;
while(c[i] != '\0')
++i;
if(c[--i] == ':')
return true;
return false;
}
что с этим? Я понятия не имею, почему он иногда распознает ярлык, а иногда и нет.
Это примеры строк, в которых он должен признать ярлык:
этикетки: остальные линии
или
этикетки:
следующая линия
У вас есть плохое состояние, если с [0] равен нулю , –
'token = (NULL," ", & context);' Это фактический код? И какова реальная цель функции «labela»? Как бы то ни было, я готов поспорить, что ему не нужно проходить через этот головной уборщик петли. Изменить: все, что вы делаете, это поиск символа ':'? – PaulMcKenzie
http://en.cppreference.com/w/cpp/string/byte/strchr Кроме того, если вы не выпустили эту память в цикле, вы пропустите память на каждой итерации. – PaulMcKenzie