2015-10-14 7 views
0

У меня есть функция, которая в данный момент ничего не делает, потому что массив символов, который я отправляю как параметр, не имеет значения. Я могу записать данные перед функцией и получить ожидаемый результат, но если я выпишу в функции, ничего не получится, даже если это первое, что я делаю.char array/string пуст при отправке функции

Сначала я выписал строку, а затем преобразовал ее в массив символов. Я также попробовал с обычной строкой как параметр с тем же результатом.

std::cout << block; 
block = this->removeNullCharacters(block.c_str()); 

Выход первого соиЬ является: "0 /"

Выход функции ниже ничего. В консоли ничего не отображается.

std::string FileSystem::removeNullCharacters(const char * input){ 
    std::string out = ""; 
    for(int i = 0; i < 512; ++i){ 
     std::cout << i << ": " << input[i]; 

     /*if(input[i] == '\0'){ 
      return out; 
     } 
     else{ 
      out += input[i]; 
     }*/ 
    } 
    return out; 
} 
+0

Попробуйте использовать DDD для просмотра входного значения ... в любом случае я предполагаю, что метод block.c_str() ничего не возвращает – Izuel

+0

@ 101010 Это не возвращаемое значение, с которым я столкнулся. std :: cout в функции. На входе [i] ничего нет. –

+0

@Izuel. Вы были правы на том, что block.c_str() ничего не возвращает, поэтому я изменил на строку как вход, и теперь я получаю, что некоторые места в заполненной строке и wierd. Если я попытаюсь записать всю строку, я ничего не вижу. –

ответ

0

Непонятно, к чему вы пытаетесь достичь, или, другими словами, вопрос не является полным.

input является указателем на char и указует на первый элемент array из char с размером 512.

out является пустой строкой и возвращается в конце функции.

block is schizophren, указатель на char и std::string в то же время, я думаю. Вам нужно это исправить.

Попробуйте это. Я думаю, что вы хотите передать указатель на последовательность s функции и объединить каждую char в string до конца последовательности (которая заканчивается \0). Забудьте о размере полностью и просто используйте нулевое завершение как условие цикла.

std::string FileSystem::removeNullCharacters(const char * input){ 
    std::string out = ""; 
    for(int i = 0; input[i] != '\0'; ++i){ 
     std::cout << i << ": " << input[i]; 
     out += input[i]; 
    } 
    return out; 
} 

Но ты должен убедиться, что вы передаете в массив char с или действительный указатель на char (который является началом последовательности char с, а последний элемент \0).

Смежные вопросы