массив строк с посторонним символом в конце

Если вы хотите использовать верхний модуль, вам нужно использовать вложение без сокращения A::B:

module Foo
  class Main

    def some_method
      Bar::Object1.new
      Bar::Object2.new
    end
  end
end

Источники:

12
задан Jonathan Leffler 8 December 2008 в 15:41
поделиться

6 ответов

Необходимо закончить строку \0 символами. Вот почему их называют, нуль завершил строки.

Также мудро выделить 1 дополнительный символ для содержания \0.

29
ответ дан 2 December 2019 в 03:49
поделиться

В дополнение к предыдущим комментариям о нулевом завершении также необходимо взять на себя ответственность за то, что она не переполнила собственного буфера. Это не останавливается в 8 символах, потому что Ваш код не останавливается! Вам нужно что-то как следующее (осуществляющий контрейлерные перевозки на предложение Jeremy):

#define DATA_LENGTH 8
#define BUFFER_LENGTH (DATA_LENGTH + 1)

char Buffer[BUFFER_LENGTH]; //holds the byte stream
int charPos=0;  //index to next character position to fill

while (charPos <= DATA_LENGTH  ) { //user input event has occured
    Buffer[i] = charInput;

    Buffer[i+1] = '\0';

    // Display a response to input
    printf("Buffer is %s!\n", Buffer);

    i++; 

}

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

3
ответ дан 2 December 2019 в 03:49
поделиться

Если Вы программируете в C или C++, необходимо помнить что: 1) строки закончены с \0 символами. 2) C не имеет граничной проверки в строках, они - просто символьные массивы.

0
ответ дан 2 December 2019 в 03:49
поделиться

Это нечетно, что никто не упомянул эту возможность:

char Buffer[8]; //holds the byte stream
int i = 0;

while (i < sizeof(Buffer) && (charInput = get_the_users_character()) != EOF)
{
    Buffer[i] = charInput;
    i++;

    // Display a response to input
    printf("Buffer is %.*s!\n", i, Buffer);
}

Эта нотация в printf () строка формата указывает максимальную длину строки, которая будет отображена и не требует пустого завершения (хотя пустое завершение является в конечном счете лучшим способом пойти - по крайней мере, после того как Вы оставляете этот цикл).

while цикл более вероятен, чем простое if, и эта версия гарантирует, чтобы Вы не переполняли конца буфера (но не гарантирует, чтобы Вы оставили достаточно пространства для запаздывания NUL '\0'. Если Вы хотите обработать это, использовать sizeof(Buffer) - 1 и затем добавьте NUL после цикла.

0
ответ дан 2 December 2019 в 03:49
поделиться

Единственной вещью Вы являетесь передающими к printf () функция, является указатель на первый символ Вашей строки. printf () не имеет никакого способа знать размер Вашего массива. (Это даже не знает, является ли это фактический массив, так как указатель является просто адресом памяти.)

printf () и все стандартные функции струны до предполагают, что существует 0 в конце Вашей строки. printf (), например, будет продолжать печатать символы в памяти, начиная в символе, который Вы передаете функции, пока это не поражает 0.

Поэтому необходимо изменить код на что-то вроде этого:

char Buffer[9]; //holds the byte stream
int i=0;

if( //user input event has occured ) 
{
        Buffer[i] = charInput;
        i++;

        Buffer[i] = 0; // You can also assign the char '\0' to it to get the same result.

        // Display a response to input
        printf("Buffer is %s!\n", Buffer);

}
8
ответ дан 2 December 2019 в 03:49
поделиться

Вы могли бы также хотеть изучить использование a stringstream.

-1
ответ дан 2 December 2019 в 03:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: