многомерные массивы и передающие буферы

Я пытаюсь сохранить буфер в сегменты массива по 1800 символов. Когда я могу перенести буфер, но когда я пытаюсь распечатать каждый новый буфер. Я получаю ноль для вывода. Что именно я делаю не так?

РЕДАКТИРОВАТЬ - я изменил цикл на это, чтобы добавить нулевые окончания в конец 2-го измерения. теперь вывод скажи мне, что это ноль. Ноprintf("%c") говорит, что данные были переданы.

<code>while(buf_pos < msg_size+1){
    if(buf_pos % 1800 == 0){
        msg_buff[key_num][cbuf_pos]='\0';
        key_num++;
        cbuf_pos=0;
        msg_buff[key_num][cbuf_pos]=buf[buf_pos];
    }else
        msg_buff[key_num][cbuf_pos]=buf[buf_pos];

    printf("%c",msg_buff[key_num][cbuf_pos]);
    cbuf_pos++;
    buf_pos++;
}
</code>

Ответы на вопрос(2)

Где вы увеличиваетеcbuf_posпри назначении наmsg_buff? Кроме того, вif(buf_pos % 1800 ==0), прекратитьmsg_buff[key_num][cbuf_pos] с '\ 0'; (проверяя, что остался еще один символ).

Что вы ожидаете от этого?

                printf("KEY%d DATA:%.*s\n",count,msg_buff[count][0],1800);

msg_buff[count][0] это первый символ вашего массива. Вам нужно пройтиmsg_buff[count] напечатать всю строку.

Кроме того, модификатор * определяется какThe width is not specified in the format string, but as an additional integer value argument preceding the argument that has to be formatted, Я бы истолковал это как то, что ваш третий аргумент (1800) должен предшествовать вашему второму аргументу (msg_buff[count]). Чтобы упростить задачу, убедитесь, что все ваши строки имеют нулевое окончание, и не используйте модификатор ширины.

Чтобы действительно создать свой массив ключей, не копируйте каждый символ один за другим в цикле. использованиеstrncpy вместо. Убедитесь, что в буфере есть место для NULL-терминатора (выделите 1801 байт, а не 1800). Прямо сейчас ваш цикл копирования нарушен, потому что вы никогда не увеличиваетеcbuf_posТаким образом, каждый символ записывается на первую позицию в массиве.

 Craig Sparks08 апр. 2012 г., 06:56
Ничего не возвращает Если я проверю данные после того, как они были переданы, как это, printf (& quot;% c & quot;, msg_buff [key_num] [cbuf_pos]); это показывает, что данные находятся в переменной. но как мне заставить его вернуть всю строку сейчас .. хмф
 08 апр. 2012 г., 07:02
Хорошо, убедитесь, что все ваши строки имеют нулевое окончание и не используете модификатор ширины.
 Craig Sparks08 апр. 2012 г., 07:01
KEY0 DATA: это выход
 Craig Sparks08 апр. 2012 г., 07:01
перемещение 1800 перед массивом также не приносит никакой пользы, я могу циклически проходить через каждый элемент 2-го измерения массива и получать символы, но я не могу вернуть их в виде полной строки.
 08 апр. 2012 г., 06:59
Под "ничего не возвращать" вы имеете в виду, что ваша программа не выводит абсолютно ничего?

Ваш ответ на вопрос